程序 “喫”內存--!

項目代碼開發工作完成,開始代碼測試階段。功能基本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~

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