여유 RAM이 사라짐-메모리 누수?


11

새로 시작된 시스템에서 free약 1.5G가 RAM을 사용했다고보고합니다 (8G RAM, lightdm 및 플라즈마 데스크탑을 갖춘 Ubuntu 12.04, 하나의 콘솔 창이 시작됨). 내가 사용하는 앱을 사용하더라도 여전히 2G를 소비하지 않습니다. 그러나 시스템을 며칠 동안 실행하면 사용중인 앱 목록에 표시되지 않고 점점 더 많은 무료 RAM이 사라집니다. 사용 된 smem --pie=name보고서는 20 % 미만 (사용 가능한 80 % 미만)이지만 다른 모든 것은 말합니다 다르게. free -m예를 들어 약 7 일에 대한 보고서 :

             total       used       free     shared    buffers     cached
Mem:          7459       7013        446          0        178        997
-/+ buffers/cache:       5836       1623
Swap:         9536        296       9240

(이것은 버퍼 또는 캐시가 아님을 알 수 있습니다). 오늘은 결국 시스템이 완전히 중단되면서 Windows 관리자가 사라지고 앱이 "대기 중"(프레임 없음)과 "너무 많은 열린 파일"에 대해 알려주는 팝업으로 끝났습니다. Syslog 보고서 :

kernel: [856738.020829] VFS: file-max limit 752838 reached

그래서 닫을 수있는 응용 프로그램을 닫고 Ctrl-Alt-backspace를 사용하여 X를 죽였습니다. X는 failsafeX로 그 이후에 다시 시도했지만 더 이상 구성을 감지 할 수 없어서 실패했습니다. 그래서 Ctrl-Alt-F2를 사용하여 콘솔로 전환하고 생각할 수있는 모든 정보 (vmstat, free, smem proc/meminfo,, lsof, ps aux)를 캡처 한 후 마지막으로 재부팅했습니다. X는 다시 failsafeX를 만들었습니다. 이번에는 "백업 구성에서 복구"라고 말한 다음 콘솔로 전환 startx하여 그래픽 환경을 성공적 으로 가져 왔습니다.

X를 죽인 후 X와 같이 X 자체를 실행하거나 X에서 실행되는 일부 사용자 프로세스와 관련이 있어야하지만이 문제를 일으키는 원인에 대한 실마리는 없습니다. free -m출력은 다음과 같습니다.

             total       used       free     shared    buffers     cached
Mem:          7459       2677       4781          0         62        419
-/+ buffers/cache:       2195       5263
Swap:         9536         59       9477

(~ 3.5GB의 여유 공간)-새로 시작한 후의 출력과 비교 :

             total       used       free     shared    buffers     cached
Mem:          7459       1483       5975          0         63        730
-/+ buffers/cache:        689       6769
Swap:         9536          0       9536

에 의해 두 가지 더 유용한 출력이 제공됩니다 memstat -u. 충돌 직전 :

User     Count     Swap      USS      PSS      RSS
mail         1        0      200      207      616
whoopsie     1      764      740      817     2300
colord       1     3200      836      894     2156
root        62    70404   352996   382260   569920
izzy        80   177508  1465416  1519266  1851840

X를 죽인 후 :

User     Count     Swap      USS      PSS      RSS
mail         1        0      184      188      356
izzy         1     1400      708      739     1080
whoopsie     1      848      668      826     1772
colord       1     3204      804      888     1728
root        62    54876   131708   149950   267860

다시 시작한 후 X로 돌아갑니다.

User     Count     Swap      USS      PSS      RSS
mail         1        0      212      217      628
whoopsie     1        0     1536     1880     5096
colord       1        0     3740     4217     7936
root        54        0   148668   180911   345132
izzy        47        0   370928   437562   915056

일주일 동안 파일 시스템 사용 일주일 동안 커널 / CPU 사용량

편집 : 모니터링 시스템에서 두 개의 그래프를 추가했습니다. 흥미로운 점 : 메모리 소비가 "점프"할 때마다 CPU가 최고조에 달합니다. 방금이 사실을 발견했습니다 .X 자체를 가리키는 또 다른 표시기가 생각납니다. 종종 컴퓨터로 돌아와 화면 잠금을 해제 할 때 CPU에서 무거운 작업을하는 것을 발견했습니다. 로 확인 top하면 항상로 나타났습니다 /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch -background none.

이 긴 설명 후에 마침내 내 질문 :

  1. 가능한 원인은 무엇입니까?
  2. 관련 프로세스 / 애플리케이션을 어떻게 더 잘 식별 할 수 있습니까?
  3. 이 동작을 피하기 위해 어떤 조치를 취할 수 있습니까? X 일 내내 컴퓨터를 재부팅하지 않는 것이 좋습니까?

예전 머신에서 약 5 년 동안 8.04 (하드)를 실행했지만 비슷한 경험을 한 적이 없습니다 (커널 업데이트 등을 위해 재부팅하기 전에 항상 100 일 이상 가동 시간). 이제 12.04를 새로 설치 한 완전한 새 시스템입니다 . 중요한 경우 일부 사양 :

Radeon (tm) HD 그래픽이 탑재 된 AMD A4-3400 APU, 오픈 소스 ati / radeon 드라이버 (fglrx가 설치되어 있지 않음), 8GB RAM, WDC WD1002FAEX-0 hdd (1TB), Asus F1A75-V Evo 메인 보드. KDE4 / Plasma가 포함 된 Ubuntu 12.04 64 비트 앱은 일반적으로 Evolution, Firefox, konsole (내장 Midnight Commander, 약 4 개의 탭 포함) 및 LibreOffice를 포함하고 있으며 때때로 Calibre, Gimp 및 Moneyplex (현재 거의 20 년 동안 사용하고있는 뱅킹 소프트웨어, Hardy에서 잘 된 버전에서).

편집 : 오늘 나는 "악한 사람"중 하나를 발견했습니다 : KDE4s 플라즈마 데스크탑. 사용한 메모리는 다시 5GB까지였습니다 killall plasma-desktop && plasma-desktop. 이것은 1.3GB RAM을 확보했습니다! ps말한다 :

                             RSS    SIZE   VSZ
plasma usage before restart  120988 526472 1300816
plasma usage after restart   92352  495972 1263632

그렇다면 1.3GB는 어디에 있었습니까? 이 값들 사이의 차이는 합산하면 1.3GB가 아닌 96MB입니다.

그리고 여전히 3.7GB가 사용 중이므로 (2GB보다 작아야 함) 이는 한 부분 일 수 있습니다. 지난 6 일 동안 여러 도구를 사용하여 이것을 모니터링했습니다. 사용 된 메모리 (캐시 및 버퍼에 대해 이야기하지 않음)가 느리지 만 꾸준히 증가합니다. 책상에 아무것도 없는데도 ...

열린 파일로 프로세스를 모니터링하는 것과 관련하여 현재 다음 1 줄짜리 (쉘과 특히 bash를 좋아합니다)를 사용하여 최상위 5를 얻습니다.

echo "$(for pid in $(ls -a /proc|egrep '^([0-9])*$'|sort -n 2>/dev/null); do \
if [ -e /proc/$pid/fd ]; then FHC=$(ls -l /proc/$pid/fd|wc -l); \
if [ $FHC -gt 0 ]; then PNAME="$(cat /proc/$pid/comm)"; \
echo "$FHC files opened by $pid ($PNAME)"; fi; fi; done)"|sort -r -n|head -n5

가독성을 높이기 위해 4 줄로 명령하십시오. Skype가 인터넷 연결을 끊는 것을 좋아하지 않는다는 것 외에는 아직 아무것도 없습니다. 연결을 끊을 때마다 열린 파일이 약간 증가하지만 극적인 것은 없습니다. 다른 한편으로 그것은 플라즈마가 그것을 담당하는 것처럼 보입니다.

VFS 사용 (2 일)

마지막에 파일 핸들이 떨어지는 것을 보시겠습니까? 그것은 플라즈마 재시작이었습니다.


sudo bash -c 'sync; echo 3 > /proc/sys/vm/drop_caches'여분의 램을 청소 합니까 ? 다음을 사용하여 열린 프로그램 파일을 볼 수 있습니다.lsof
Savvas Radevic

또한 데스크톱 관리자 전환을 시도 했습니까? 예를 들어 lxde (또는 lubuntu-desktop)? 마지막으로, 디스크로의 출력이 양호합니까? 라이브 CD를 사용하여 디스크의 SMART 데이터와 디스크 간 파일 복사 속도를 확인 했습니까?
Savvas Radevic

당신이 누수가 있는지 확인하기 위해 테스트에이 옵션을 선택 하는 방법 메모리 누수 감지하는 방법
미치

@ medigeek : 내가 지적했듯이 캐시와 버퍼는 문제가되지 않습니다. 의 출력을 참조하십시오 free. 다른 DE로 바꾸는 것은 실제로 생각한 것입니다. KDE3.5를 사용할 수 있다면 플라즈마로 끝나지 않았습니다. 플라즈마가 관련되어 있는지 확인하는 것은 일시적 일 수 있습니다.
Izzy

@Mitch : memprof가 알려진 프로세스 (아직 격리하지 않은)에 대해 사용해야한다는 것을 이해했습니다. 물론 시스템 전체에서 사용할 수 있습니까? 또한 "너무 많은 열린 파일"오류에서 알 수 있듯이 일부 프로세스는 많은 파일 핸들을 열고 해제하지 않는 것처럼 보입니다. 그것이 memprof에 의해 잡힐 지 확실하지 않습니다. 이제 열린 파일로 상위 5 개의 프로세스를 캡처하는 스크립트를 설정했습니다.
Izzy

답변:


6
  1. 많은 수의 열린 파일은 무언가 잘못되었다는 좋은 실마리입니다. 내 생각 엔 KDE 시스템 데몬 일 것이다.

  2. 콘솔을 열고 "top"을 실행하십시오. 그런 다음 <및>를 사용하여 정렬 열을 VIRT 또는 RES로 변경하고 어떤 프로그램이 가장 많은 메모리를 사용하는지 확인하십시오. 메모리 누수는 대량으로 확장 된 가상 메모리 사용으로 표시되며, 누수 된 메모리에 대한 포인터가 손실되면 사용되지 않고 스왑됩니다. 또한 "lsof"를 실행하고 열려있는 파일이 많은 프로세스를 찾으십시오. 이는 실제로 파일 디스크립터 누출 인 것 같습니다.

  3. 프로그램을 추적하고 버그를보고하십시오.


나는 이미 이것을 위해 top / htop을 활용하려고 시도했다. 문제는 RESident 메모리에 대한 결과가 없다는 것입니다 (위에서 설명한 것처럼 사용 된 메모리의 작은 부분 만 실행중인 앱에 연결할 수 있음). 가상 메모리의 경우 해석하기가 어렵습니다 (시작한 직후에도 가상 메모리 사용량은 최대 3TB이며 하드 드라이브조차도 처리 할 수없는 크기입니다). 따라서 현재 예를 들어 Evolution은 상단에 따라 1.9GB VIRT를 사용하는 반면 사용중인 전체 메모리는 최대 1.2GB (캐시 및 버퍼 제외)입니다. 그리고 네, 첫 번째 의도는 프로그램을 추적하는 것이므로 버그를
신고

모니터링 시스템에서 2 개의 imgs를 추가했습니다. "점프"는 항상 같은 시간에 발생한 것처럼 보입니다 (단, 예외 1 건). 불행히도 imgs는 cron으로 확인할 타임 스탬프를 제공하지 않습니다. Btw : 얼마나 많은 파일이 열려 있는지 프로세스를 모니터링하는 방법이 있습니까?
Izzy

1
당신의 추측은 좋은 것이 었습니다. 데몬은 아니지만 주로 KDE 구성 요소 인 plasma-desktop입니다 (위 참조). 그것에 관한 재미있는 것 : 나는 방금 알아 내고 여기에 게시했습니다. 그리고 10 분 후에 매일 매일 apt-get update && apt-get upgrade플라즈마 데스크탑에 대한 업데이트가있었습니다. 그 사람들은 빠르다 X) 이제 나는 그것을 선언하기 전에 문제가 해결되었는지 잠시 동안 지켜 본다. 지금까지 상황은 매우 유망 해 보입니다.
Izzy

여전히 안정적으로 보입니다. "악한 과정"을 가리 키 lsof지도 않았지만 topKDE 데몬에 대한 당신의 추측은 문제의 지시를 받았습니다. 다시 한 번 감사드립니다. 내 컴퓨터의 가동 시간은 약 14d이며 VirtualBox, 컴파일 등을 병렬로 실행하더라도 모든 것이 안정적으로 보입니다. 그래서 나는 이것이 해결되었다고 생각하고 가장 가까운 일치를 표시합니다 :)
Izzy

0

나는 그것이 정상적인 시스템 행동이라고 생각합니다. 대부분 모든 것이 정상입니다.

이 훌륭한 논문 (리눅스가 내 램을 먹었다)을 읽고 리눅스가 램을 관리하는 방법과 걱정할 필요가없는 이유를 이해할 수 있습니다.

http://www.linuxatemyram.com/


4
오-7 일 후에 "너무 많은 열린 파일"오류로 시스템이 충돌하면 "정상적인 시스템 동작"이라고 들었습니다. 나는 지금 약 15 년 동안 리눅스를 운영하고있다. 그리고 네, 리눅스가 어떻게 "free RAM"(캐싱 등에 사용)을 사용하는지 완전히 이해합니다. 위에서 지적한 바와 같이 : 캐시와 버퍼는 여기서 문제가되지 않습니다. 나는 좋은 이유로 RAM이 사용되는 것에 대해 이야기하고 있지 않습니다. 리눅스는 스왑 가격으로 캐시에 고착하지 않을 것입니다.
Izzy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.