zoukankan      html  css  js  c++  java
  • 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, 大致的看一下



     

                   

           

  • 相关阅读:
    [程序员必备工具]分享一款不错的个人代码个人知识管理软件wiz
    移动开发,如何选择手机软件开发​平台?
    Best Wishes,my Married Friend!
    三年来最开心的一天!
    “世事无绝对”也是相对的……
    又到世界CUP……
    利物浦,总是在我情绪低落时给我鼓舞!
    一种感觉
    How to break to loop? It frustrates me!
    取舍有度,学会放弃……
  • 原文地址:https://www.cnblogs.com/Ivyduan/p/13842276.html
Copyright © 2011-2022 走看看