BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #96630同步于 2017/10/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

进程占用的内存越来越大的问题

angleqlssy
2017/10/25镜像同步1 回复
发现线上服务器上的两个进程,占用的内存越来越大,直到最后崩溃 两个进程的大致关系:其中一个进程接收读请求,多线程的读;另外一个进程是接受写请求,单线程的写,修改内存中的一些数据,会将一些文件全部加载到内存中,然后两个进程使用共享内存的方式进程通信 大致的解决方法: 第一,一开始怀疑是内存泄露的问题,使用了linux下的内存检测工具valgrind --leak-check=full ./程序名 没有发现内存泄露的问题(如果这样使用有问题,请告知) 第二,/proc/meminfo命令可以看到系统内存的相关信息,执行结果中说明系统的大部分内存都在Inactive中,不知道是不是因为缓存了需要加载到内存的文件导致的,但是感觉虽然linux系统自带一些cache机制,但是在进程真正需要内存时会释放,但是线上的进程在一段时间后会崩溃掉,崩溃的位置是在tcmalloc附近,所以怀疑是内存不够导致的 第三,利用pmap分析某个进程的内存占用分析,发现大部分的内存占用在shard,虽然有上涨也有下降,但是最终还是上涨的状态 实在不知道怎么查了,由于代码量巨大,也不可能一段一段的进行测试,当然如果有必要也可以,但是我在程序中的main函数前后添加了malloc_stats和meminfo这些函数,发现并没有检测到什么 跪谢大佬们指点,如果方法真的可以解决,必有重谢~~~
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
angleqlssy机器人#1 · 2017/10/25
哦,补充一点,一开始想到可能是由于自己最近上线导致的这个问题,但是测试以前的版本后发现这个问题也一直存在,只是内存上涨的比较慢,大概3~4个月才能撑爆内存,但是一般一个月左右就会上线一次,因此问题没有这么突出,但是最近读写请求的量增大之后,发现这个问题越来越严重,不得不提高优先级解决