이전에 일부 응용 프로그램에서 메모리 누수가 발생했다는 신호 kernel_task
는 일반적으로 기가 바이트 정도의 큰 메모리 공간을 차지 한다는 것 입니다. 잘못 kext
이이 메모리 사용을 야기한 경우 , 할당 된 메모리와 할당 될 것으로 예상되는 메모리 간의 불일치가 예상됩니다.
diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6)
'유선'및 '이름'이외의 단어를 반환합니다.
논문을 쓰면서 미리보기에서 열려있는 pdf를 변경하면 종종 나쁜 일이 발생하는 것을 발견했습니다. 때로는 메모리 사용량이 kernel_task
약 8 기가 바이트 이상으로 증가 할 수 있습니다. 미리보기를 종료하면 즉시 정상으로 돌아갑니다 . 따라서 분명히 무언가 잘못되었습니다. 이러한 조건에서 미리보기에서 메모리가 누출됩니다.
그래서, 내 질문은 이것이다 : 만약 내가 프로세스의 풋 프린트에서 갑자기 예상치 못한 증가를 통해 램을 유출했다고 알 kernel_task
수없는 이유, OS X 뭔가가 사라 잘못이 알고있다. Preview를 종료하면 누락 된 malloc()
'd 메모리가 복원되면 Darwin이 가비지 수집을 자동으로 수행 하지 않는 이유 는 무엇입니까?
메모리 관리 작동 방식에 대한 근본적인 오해가 있습니까?
편집 : (15/9/15)
여기 내가 말하는 것에 대한 데모가 있습니다. 우선, 메모리 사용량이 높다는 것을 알았습니다 kernel_task
(미리보기가 열려 있으며 333 MiB의 램을 사용하여 활동 모니터의 맨 아래에 표시됩니다).
아래 Ashley의 유용한 발언에 따라 각 kext가 얼마나 많이 사용하는지 알아 보겠습니다.
$ kextstat | awk 'NR==1{ printf "%10s %s\n", $5, $6; } NR!=1{ printf "%10d %s\n", $5, $6; }' | sort -n
...
...
...
1249280 com.apple.driver.DspFuncLib
1769472 com.apple.nvidia.driver.NVDAGK100Hal
2629632 com.apple.nvidia.driver.NVDAResman
6184960 com.apple.driver.AirPort.Brcm4360
$
따라서 큰 금액은 아닙니다. 내 컴퓨터에는 개별 GPU와 통합 GPU가 있습니다. 드라이버는 몇 MiB의 유선 램만 사용하고 있습니다. 내 직감에서 미리보기를 종료하고 메모리 풋 프린트가 어떻게되는지 봅시다 kernel_task
.
미리보기가 사라지고 커널의 메모리 사용량이 크게 줄었습니다. kext 사용법의 변경에 대한 증거는 여전히 없습니다. 위 명령의 출력은 변경되지 않습니다.
편집 : 버그가 22701036으로보고되었습니다. 여전히 사과의 응답을 기다리고 있습니다. ActivityMonitor에서 프로세스를 검사하면 특별히 흥미로운 것은 없지만 뭔가 빠진 것 같습니다.
kextstat
. 나의 이해는 경우이다 KEXT는 다음, 할당 된 바이트 커널이 알고있는 그 유출 되어 다른 것입니다 할당합니다. 이 경우, 나는 새는 kext 가 없다는 것을 보여주기 위해 거기에 넣었습니다. 따라서 2) Preview는 램을 먹을 때 발생하지 않습니다. 대신 kernel_task
많이 자랍니다. 나는이 문제를 재현하고 사진을 찍을 것입니다 :-).
diff
명령이 비교되어Size
및Wired
로부터 열을kextstat
출력. 나는Size
"할당 된 메모리" 라는 것에 동의 하지만 "할당Wired
될 것으로 예상 되지 않는다 "고 생각man kextstat
합니다 ( "kext가 차지하는 커널 메모리의 유선 바이트 수"로 설명합니다). 2) 당신은 사이의 불일치를보고 있는가Size
와Wired
때 미리보기로 문제가?