Linux系统性能问题定位-内存泄露

来源:互联网 发布:十面埋伏 知乎 编辑:程序博客网 时间:2024/06/05 03:28

问题描述:

500用户并发运行半小时后性能急剧下降。

TPS(每秒处理事务数)曲线图如下:

运行前半小时,TPS约640;半小时后,TPS急剧下降(在20-100范围内波动)。

图-1

平均响应时间曲线图如下:

运行前半小时,平均响应时间约1秒;半小时后,响应时间急剧上升(在4-20秒范围内波动)。

图-2

备注:测试环境拓扑图

图-3

原因分析

1.   打开nmon的监控结果,分析DISKBUSY数据可知磁盘IO接近100%,IO突然增高导致系统处理响应时间变大,从而导致每秒处理事务数(TPS)急剧减小。

图-4

2.         再分析nmon的MEN数据可知系统空闲内存逐步减小,半小时左右内存降到最低值(见图-5),存在内存泄露;同时结合nmon的VM数据可知,当内存降到最低值(内存不足)时,系统开始频繁的在交换区写入写出(见图-6)。交换区频繁的写入写出操作占用了大量的IO开销,导致上述的磁盘IO瓶颈。

图-5

图-6

3.   根据上述对nmon监控数据的分析可知,linux系统上存在内存泄露,当内存不足时系统性能就急剧下降。因为linux系统上同时部署DB数据库服务和astrotest后台程序,在测试运行中,使用top命令可知DB数据库服务的内存占用很小,astrotest程序占用了大量内存。即astrotest程序存在内存泄露。

4.   分析astrotest程序,发现在取数据库的代码中有个结构没有释放。这最终导致系统内存泄露。

解决方案

修改astrotest程序代码,及时释放该结构。

原创粉丝点击