中级会员

金币70 分
威望70 点
UID386406
好友0
记录0
回帖0
主题20
积分171
阅读权限15
注册时间2014-4-8
最后登录2014-6-18
在线时间6 小时
中级会员

- 回帖
- 0
- 主题
- 20
- 积分
- 171
- 在线时间
- 6 小时
- 注册时间
- 2014-4-8
- 最后登录
- 2014-6-18
|
一、现象
运行了使用NFS文件系统的应用程序后,内存缓慢泄漏,
最后导致整个服务器的内存全部耗尽,系统调起多个pdflush进程,并占到CPU的99%,
这时整个系统系统变得处理速度极慢,那怕是敲个命令都慢得不行;
二、检查流程
1. 查看系统最耗内存的进程
# top -m
Tasks: 428 total, 1 running, 427 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.4%us, 0.1%sy, 0.0%ni, 94.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 32915200k total, 1576064k used, 31339136k free, 284588k buffers
Swap: 8385920k total, 0k used, 8385920k free, 317440k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14099 root 15 0 144m 96m 2160 S 0.0 0.3 309:57.67 your_program
发现最耗内存的就是使用NFS的应用程序;
2. 查看进程占用的内存
# pmap 进程号
...
00007fffbebfd000 12K r-x-- [ anon ]
ffffffffff600000 8192K ----- [ anon ]
total 154604K
但应用程序实际使用的内存并不多,这时就开始怀疑是系统的原因;
3. 系统内存查看
每两秒统计一次内存使用情况,看内存的使用速度
# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 31317192 284620 337800 0 0 0 0 0 1 5 0 94 0 0
...
接着看到底是什么占用了这么多内存,win xp sp3纯净版 iso owds.ys168.com/先看内核空间的
# vmstat -m
Cache Num Total Size Pages
nfs_direct_cache 0 0 136 28
nfs_write_data 189 207 832 9
nfs_read_data 32 40 768 5
nfs_inode_cache 1027389 1027389 1032 3
nfs_page 304 360 128 30
...
kmem_cache 144 144 2688 1
发现了是nfs_inode_cache异常,占用了大量的内存;
3. 使用slabtop命令查看内核slab 缓冲区信息
# slabtop -s c | head
Active / Total Objects (% used) : 3318152 / 3333777 (99.5%)
Active / Total Slabs (% used) : 561213 / 561243 (100.0%)
Active / Total Caches (% used) : 92 / 145 (63.4%)
Active / Total Size (% used) : 1848724.93K / 1851100.14K (99.9%)
Minimum / Average / Maximum Object : 0.02K / 0.55K / 128.00K
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
1014219 1014219 100% 1.01K 338073 3 1352292K nfs_inode_cache
1021475 1021475 100% 0.52K 145925 7 583700K radix_tree_node
#
我们看到 nfs_inode_cache 占用了大概 1.3GB,
在正常情况下,nfs_inode_cache 应该 30 MiB 左右。所以 nfs_inode_cache 在这里是异常的。
|
|