SLAB 회수 불가능 메모리를 무한정 늘리는 원인을 어떻게 알 수 있나요?

SLAB 회수 불가능 메모리를 무한정 늘리는 원인을 어떻게 알 수 있나요?

내 SLAB 회수 불가능 메모리(SUnreclaim)는 제한 없이 증가하는데, 이것이 내 시스템이 결국 RAM이 부족해지고 충돌할 때까지 교체를 시도하기 시작하는 이유인 것 같습니다. 이것은 지난 며칠 동안의 SReclaim 차트입니다. 16GB 서버에서 일반적인 RAM 사용량은 약 5GB입니다. SReclaim이 약 10.xGB에 도달하면 무제한 교환이 시작됩니다.

그래프는 점점 커지는 것을 보여주며, 두 경우 모두 시스템이 저절로 죽기 전에 RAM을 확보하기 위해 다시 시작했습니다.

여기에 이미지 설명을 입력하세요.

이는 두 번째 재부팅 전 슬래브의 일부입니다.

---------------------------------- 20180730164416 ----------------------------------
 Active / Total Objects (% used)    : 34014938 / 35150125 (96.8%)
 Active / Total Slabs (% used)      : 1098114 / 1098114 (100.0%)
 Active / Total Caches (% used)     : 120 / 147 (81.6%)
 Active / Total Size (% used)       : 7332279.93K / 7831039.90K (93.6%)
 Minimum / Average / Maximum Object : 0.01K / 0.22K / 22.88K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   
8433792 8349318  98%    0.06K 131778       64    527112K pid                    
4253942 4250995  99%    0.09K  92477       46    369908K anon_vma               
3011640 2929311  97%    0.20K 150582       20    602328K vm_area_struct         
2994831 2908345  97%    0.19K 142611       21    570444K dentry                 
2068096 2033715  98%    0.03K  16157      128     64628K kmalloc-32             
1953024 1932838  98%    0.02K   7629      256     30516K kmalloc-16             
1820128 1618465  88%    0.25K 113758       16    455032K filp                   
1149438 1149438 100%    0.04K  11269      102     45076K pde_opener             
1014336 891822  87%    0.06K  15849       64     63396K kmalloc-64             
954051 953969  99%    0.19K  45431       21    181724K cred_jar               
757224 752612  99%    0.10K  19416       39     77664K buffer_head            
627368 627368 100%    0.07K  11203       56     44812K eventpoll_pwq          
564900 535453  94%    0.09K  13450       42     53800K kmalloc-96             
372690 336229  90%    0.13K  12423       30     49692K kernfs_node_cache      
362528 362365  99%    0.12K  11329       32     45316K seq_file               
329937 327195  99%    1.06K  21455       30    686560K signal_cache         

task_struct도 일반적으로 재부팅해야 하기 전에 약 1.5GB로 매우 높습니다.

몇 가지 질문:
1) ​​어떤 SLAB 캐시에 회수 불가능한 RAM이 포함되어 있는지 확인하는 방법은 무엇입니까?
2) RAM을 회수할 수 없는 이유를 알아내기 위해 제가 할 수 있는 다른 방법이 있습니까?

답변1

되튐. 현재 동일한 문제를 해결하는 중입니다.

 Active / Total Objects (% used)    : 27175932 / 27473124 (98.9%)
 Active / Total Slabs (% used)      : 844076 / 844076 (100.0%)
 Active / Total Caches (% used)     : 77 / 108 (71.3%)
 Active / Total Size (% used)       : 12915527.98K / 12995852.27K (99.4%)
 Minimum / Average / Maximum Object : 0.01K / 0.47K / 15.25K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   
24418488 24418393  99%    0.50K 763083       32  12209328K kmalloc-512
853984 853984 100%    0.12K  26687       32    106748K kmalloc-128
801528 643979  80%    0.19K  19085       42    152680K kmalloc-192
401792 401792 100%    0.06K   6278       64     25112K kmalloc-64

kmalloc-512범인인 것 같습니다. 할당을 추적하기 위해 커널 디버깅 옵션이 활성화되었습니다 kmalloc-512.

관련 정보