Назад | Перейти на главную страницу

Системный кэш slab-кэша linux используется слишком много proc_node_cache

Моя система запускает только java-программу, в какой-то момент использование памяти очень быстро увеличивается до очень высокого процента:

использование памяти java:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                       
23046 admin     18   0 2115m 427m  13m S 14.7 10.8   1609:58 java 

но использование системной памяти:

[root@AY130716093217935dfdZ ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3959       3709        249          0         93        122
-/+ buffers/cache:       3493        465
Swap:            0          0          0

то я знаю, что использование exclude java - это плита ядра системы:

[root@AY130716093217935dfdZ ~]# cat /proc/meminfo | grep slab -i
Slab:          3092688 kB

Итак, я проверяю детали использования slab use slabtop:

 Active / Total Objects (% used)    : 9509520 / 9545651 (99.6%)
 Active / Total Slabs (% used)      : 771723 / 771725 (100.0%)
 Active / Total Caches (% used)     : 94 / 138 (68.1%)
 Active / Total Size (% used)       : 2751436.50K / 2761816.41K (99.6%)
 Minimum / Average / Maximum Object : 0.02K / 0.29K / 128.00K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME                   
3140784 3140358  99%    0.08K  65433       48    261732K selinux_inode_security
3127590 3127260  99%    0.21K 173755       18    695020K dentry_cache
3108264 3108182  99%    0.58K 518044        6   2072176K proc_inode_cache

Вы можете обнаружить, что proc_node_cache, entry_cache очень большой.

Итак, я полагаю, есть какая-то программа, сканирующая каталог / proc?

но программа java не должна этого делать.

когда я перезапускаю программу Java, плита сжимается до минимума.

Кстати, моя система смонтирует nfs, а программа java записывает журнал в файл на nfs:

[root@AY130716093217935dfdZ ~]# mount
/dev/hda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
//42.121.111.155/server23 on /mnt/server23 type cifs (rw,mand)
//10.161.143.83/fulllogs on /mnt/newlogs type cifs (rw,mand)

Мое ядро:

Linux AY130716093217935dfdZ 2.6.18-308.el5 #1 SMP Tue Feb 21 20:06:06 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

Операционные системы:

CentOS release 5.8 (Final)

машина была создана XEN. в качестве гостя XEN.

Я хочу знать, в какой ситуации будет такое большое использование памяти для proc_inode_cache?

что может случиться с моим сервером?

Спасибо !

ОБНОВИТЬ:

просмотрев исходный код ядра 2.6.18. в exit.c:

do_exit -> release_task ->proc_flush_task(p);

функция proc_flush_task:

/**                                                                                                                                                                                                         
 * proc_flush_task -  Remove dcache entries for @task from the /proc dcache. 

Это означает, что при завершении задачи процесс будет получен, поэтому это может объяснить, почему плита сжимается, когда я останавливаю процесс java.

после этого возникает вопрос, потому что поток java равен 600, что равно времени в другое время, почему он содержит так много proc_inode?