일부 PHP 프로세스의 메모리 사용법을 이해하려고합니다. get_memory_usage()
과 pmap
을 모두 사용해 보았지만 그 결과는 약 1 배 정도 벗어났습니다. 나는 memory_get_usage()
과 memory_get_usage(true)
뿐 아니라 memory_get_peak_usage(true)
도 시도했지만, 심지어는 memory_get_peak_usage(true)
(세 가지 종류 중 가장 큰 것)조차도 pmap을 통해보고되는 것과는 큰 차이가 있습니다. pmap -d PID
의 전형적인 결과가 같은 것을 제공하는 반면, 내 PHP 스크립트 내의 모든 분 1.75MB 및 3.5MB 사이의 범위 값을 반환 memory_get_peak_usage(true)
를 호출 구체적memory_get_usage() 및 pmap 이해하기
:
...
b7839000 4 r---- 0000000000008000 0ca:00060 libcrypt-2.11.1.so
b783a000 4 rw--- 0000000000009000 0ca:00060 libcrypt-2.11.1.so
b783b000 156 rw--- 0000000000000000 000:00000 [ anon ]
b7864000 8 rw--- 0000000000000000 000:00000 [ anon ]
b7867000 12 r-x-- 0000000000000000 0ca:00060 libgpg-error.so.0.4.0
b786a000 4 r---- 0000000000002000 0ca:00060 libgpg-error.so.0.4.0
b786b000 4 rw--- 0000000000003000 0ca:00060 libgpg-error.so.0.4.0
b786c000 4 r---- 0000000000000000 000:00000 [ anon ]
b786d000 16 rw--- 0000000000000000 000:00000 [ anon ]
b7871000 108 r-x-- 0000000000000000 0ca:00060 ld-2.11.1.so
b788c000 4 r---- 000000000001a000 0ca:00060 ld-2.11.1.so
b788d000 4 rw--- 000000000001b000 0ca:00060 ld-2.11.1.so
bffc7000 136 rw--- 0000000000000000 000:00000 [ stack ]
f57fe000 4 r-x-- 0000000000000000 000:00000 [ anon ]
mapped: 32740K writeable/private: 13116K shared: 28K
만약 내가 제대로 이해하고, 쓰기 가능한/비공개 그림은 프로세스에서 독점적으로 사용되는 메모리이기 때문에 가장 적합한 수치입니다. 거의 13MB는 memory_get_peak_usage(true)
에 의해보고 된 금액과는 거리가 있습니다. 누군가가 불일치를 설명해 주시겠습니까?
감사합니다. 실제로 1 바이트 = 8 비트,하지만 나는 이것을 두 번 확인했다. pmap 매뉴얼 (http://linux.die.net/man/1/pmap)에 따르면 메모리 사용량은 킬로바이트 단위로보고됩니다. memory_get_peak_usage()는 바이트 단위로 사용량/할당량을 출력합니다.이 용량은 내가 어딘가에서 훔친 함수를 사용하여 메가 바이트로 변환되었습니다. [$ exp = floor (log ($ bytes)/log (1024)); $ bytes/pow (1024, floor ($ exp));] ... Google의 편리한 디스크 저장소 변환기를 사용하여 일부 값을 두 번 확인한 후. 그래서 그게 범인이라고 생각하지 않습니다. 하지만 불일치가 얼마나 가까운 지 의심 스럽습니다. – robguinness
그래, 나는 내가 항상 기억할 수있는 단순함을 위해 10의 요소에서 항상 작동하는 정확한 수치를 찾지 않았다. 기본 8 내 강한 장점은 아니지만 나는 두렵다. 바이트를 kb로 변환하면 바이트/1024로 변환 한 다음 kb/1024로 변환하면 너무 복잡해지기가 필요 없습니다. 방정식을 통해 mb 그림을 얻습니다. – Dave
13116K = 12.8 mb 이는 처음에 기본 10보다 기본 8 변환에 더 가깝습니다. 나는 여러분에게 뭔가 다른 것을 알려주지 만 숫자가 아닌 비트 단위로 반환되는 수치 중 하나에 돈을 넣을 것입니다! – Dave