내 응용 프로그램 중 하나가 약 100 명의 작업자를 실행합니다. 그것은 threading
응용 프로그램으로 시작되었지만 성능 (대기 시간) 문제가 발생했습니다. 그래서 나는 그 노동자들을 multiprocessing.Process
es로 바꾸었다. 아래의 벤치 마크는 더 많은 메모리 사용량 (요인 6)의 비용으로로드 감소가 달성되었음을 보여줍니다.다중 처리로 메모리 사용 공간 축소?
그렇다면 Linux가 소를 사용하고 작업자가 데이터를 공유하지 않는 경우 정확히 어디에서 메모리 사용량이 발생합니까?
메모리 풋 프린트를 어떻게 줄일 수 있습니까? (대체 질문 : 어떻게 threading
에 대한 부하를 줄일 수있다?)
리눅스 2.6.26, 4 개의 CPU 2G에 대한 벤치 마크 RAM : (즉, CPU 사용은 하나 개의 CPU의 %에 주어진, 그래서 전체 부하가 400 %입니다 참고 . 숫자는 Munin 그래프보고에서 파생 된)
| threading | multiprocessing
------------------+-----------+----------------
memory usage | ~0.25GB | ~1.5GB
context switches | ~1.5e4/s | ~5e2/s
system cpu usage | ~30% | ~3%
total cpu usage | ~100% | ~50%
load avg | ~1.5 | ~0.7
배경 :. 응용 프로그램이 네트워크에서 이벤트를 처리하고 MySQL 데이터베이스에 그 중 일부를 저장한다.