程序 “吃”内存--!

项目代码开发工作完成,开始代码测试阶段。功能基本ok,测试性能时,发现进程会定时‘吃掉’8k内存。

1.top -Hp  进程Id

          top -Hp 2281
top - 12:50:28 up 23 days,  2:30, 22 users,  load average: 0.11, 0.20, 0.22
Tasks:   4 total,   0 running,   4 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.4%us,  0.2%sy,  0.0%ni, 98.9%id,  0.4%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32937632k total,  1437780k used, 31499852k free,   415048k buffers
Swap:  9409880k total,    53544k used,  9356336k free,   207916k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                          
 2281 d5000     15   0 82336 3872 2464 S    0  0.0   0:00.01 response_sync_s                                                                                                                   
 2286 d5000     18   0 82336 3872 2464 S    0  0.0   0:00.00 response_sync_s                                                                                                                   
 2290 d5000     18   0 82336 3872 2464 S    0  0.0   0:00.00 response_sync_s                                                                                                                   
 2294 d5000     18   0 82336 3872 2464 S    0  0.0   0:00.00 response_sync_s  

发现 VIRT 和RES每个一段时间就增加8k。我的内存就这样无情的被吃掉了。

2.排查代码(多线程,逐个排查,定位到单个线程后,该线程是每隔5秒钟汇报下进程使用cup及内存使用率,调用系统管理一函数导致。找系统管理组同事,寻求帮助,定位排查发下,fopen()文件后并没有及时fclose。并用lsof -p 进程pid 进行验证,确实发现进程打开大量文件,并每隔一段时间都会增加打开的文件数。修改代码,再次测试,ok~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章