Web调优之IBM JDK+liberty(一): Jmeter pod里压,50个线程并发测试,调整 -Xms -Xms, Log原来是大问题

1.运行环境

Web服务器: Liberty(IBM J9 JDK) on K8S,base image : FROM websphere-liberty:20.0.0.3-kernel-java8-ibmjava 

DB:  DB2 

WebApp 简介: 一个简单的Restful服务,从DB2 Select若干条数据

测试环境: 为防VPN及家里网络影响测试效果,在另外一个POD上装Jmeter,这样用POD调用POD,测试结果比较准确

2.调优前

2.1 环境设置

                JVM: -Xms -Xmx : 2G   Xmn:1G   POD: memeory request: 3G, limit:4G, POD does not have CPU limitation

                Liberty connector: <connectionManager minPoolSize=“50” maxPoolSize=“50" purgePolicy=“FailingConnectionOnly”/>

                DB 最大连接数: 50

2.2 50个并发压测结果

 3. 分析压测结果提出相应整改方案

3.1 结果

  • Global GC 发生了11次,后面平均2分钟左右一次
  • Local GC发生了558次,基本3-4秒一次
  • Contrast 最多占了28%左右的工作线程,占了700M的内存
  • 很多线程在执行new relic
  • 很多线程park, 因为mybatis 在输出log (在这次压测之前,通过new relic分析调用栈发现占用时间最多的是打印log,原来通过AOP记录日志的代码已经关闭)

     Park的线程数占到23%

     

     调用Unsafe.park 的线程占到39% 

     

 第一次dump的内存使用率
 Nursery Area Free : 767,422,912 bytes Total : 1,048,576,000 bytes 73 % free
Tenured Area Free : 951,384,856 bytes Total : 1,098,907,648 bytes 86% free
最后一次dump的内存使用率
 Nursery Area Free : 791,680,088 bytes Total : 1,048,576,000 bytes 75 % free
Tenured Area Free : 671,331,936 bytes Total : 1,098,907,648 bytes 61% free

3.2 措施 

  1.  调整Xms Xmx 为 4G, Xmn为2G
  2.  关闭Contrast 和 new relic
  3.  调整日志level为error,即很少有日志输出。

4.3 效果

1. Local GC每1-2s一次,反而更多(调整前是3-4s),因为Throughput 加大,每秒处理的请求从39变成了630,所以GC更频繁,但是每次回收效果不错, 所以尚可接受

2. Global GC 就没有发生,即压测的半个小时没有Global GC

3. Park 的进程数由23%左右变成11%左右

 

 4. 平均响应时间由1260ms 变成 79.2ms, 原来的运行时间是现在的16倍,Trasactions/s由39变成630

 5. 小tips

5.1. IBM Thread and Monitor Dump Analyzer for Java (TMDA) ---jca467.jar

利器,可以分析java core 文件, 查看GC做了多少次,每次的效果如何,以及有多少个线程在Park,wait, wait的资源是什么,当时线程执行的方法是什么

下载: https://www.ibm.com/support/pages/ibm-thread-and-monitor-dump-analyzer-java-tmda

下面两个视图是最爱,可以分别从Thread的角度、从方法的角度看Thread的情况,通过这个我们发现了很多线程在打印mybatis日志时part

 5.2 IBM HeapAnalyzer--ha457.jar

利器2,可以分析heap dump. 看到内存泄露的地方,我们通过这个工具发现 contrast占用了600M左右的内存,是推荐第一的可能内存泄露的地方。--

下载:https://www.ibm.com/support/pages/ibm-thread-and-monitor-dump-analyzer-java-tmda

5.3. liberty生成dump 文件的方式

liberty 生成 dump 文件命令: ./server dump --include=thread,heap

--include=thread: 生成java core 文件, 开始压测生成一次,压测过程中2分钟生成一次,由IBM Thread and Monitor Dump Analyzer for Java打开

--include=heap: 生成heap dump  ,由IBM HeapAnalyzer打开

https://www.ibm.com/support/pages/node/476701

一般先生成java core, 大致的看一下



 

               

       

原文地址:https://www.cnblogs.com/Ivyduan/p/13842276.html