问题描述:
500用户并发运行半小时后性能急剧下降。
TPS(每秒处理事务数)曲线图如下:
运行前半小时,TPS约640;半小时后,TPS急剧下降(在20-100范围内波动)。
图-1
平均响应时间曲线图如下:
运行前半小时,平均响应时间约1秒;半小时后,响应时间急剧上升(在4-20秒范围内波动)。
图-2
备注:测试环境拓扑图
图-3
图-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程序代码,及时释放该结构。
因篇幅问题不能全部显示,请点此查看更多更全内容