Моя система запускает только 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?