• jmeter性能压测-性能压测常见问题分析之cpu过高/内存使用持续上升


    基本术语解释:

    内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用,就会出现out of memory;内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。(程序运行时所需要的内存,超出了它可用的最大内存。)
    内存泄露(memory leak):是指程序在申请内存后,无法释放已申请的内存空间。
    memory leak会最终会导致out of memory

    cpu过高/内存使用持续上升分析
    在处理压力测试问题的时候,经常遇到OOM的情况,这时候我们需要去记录内存实时的情况,一般会打出一个dump文件,然后使用内存分析工具去查看哪些对象一直占用了大量内存,最终分析出代码需要优化的地方。

    Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。
    dump文件记录了JVM运行期间的内存占用、线程执行等情况。常用的dump文件有heap dump和thread dump(也叫javacore,或java dump)。

    heap dump记录内存信息的,thread dump是记录CPU信息的。
    Java用如下命令打出dump文件:
    jmap -dump:format=b,file=/path/heap.bin 进程ID     #所有线程的状态都有,全部都统计
    jmap -dump:live,format=b,file=/path/heap.bin 进程ID   #live的选项,实际上是产生一次Full GC来保证只看还存活的对象。
    live表示我们需要抓取目前在生命周期内的内存对象,也就是说GC收不走的对象,然后我们绝大部分情况下,需要的看就是这些内存。而且会减小dump文件的大小。(慎用,因为这个命令会将没有回收的内存手动回收一次,只留下不会被回收的。)

    #zhongyong使用的
    jmap -dump:format=b,file=20170307.dump 57776  #20170307.dump生成的dump文件,57776pid,生成的文件在对应服务路径下面
    strings filename                   #转成string就可以直接查看详情
    在cmd下,输入:java -verbose 查看jdk所在路径,可以用自带的jvisualvm查看内存的使用情况查看dump文件
    CPU突然变高,分析问题步骤:

    1.通过top命令,可以确认下,到底是哪个进程导致CPU变高,top
    2.使用top -Hp pid来对该进程下的线程进行观察。展示的pid就是对应的线程了。
    3.jstack查找这个线程的信息
    jstack [进程]|grep -A 10 [线程的16进制]
    即: jstack 12920|grep -A 10 2600
    通过该命令可以查找到当前线程的状态

    常见线程描述:
    wait on monitor entry: 被阻塞的,这种情况是有问题的
    runnable : 注意IO线程
    in Object.wait(): 注意非线程池等待

                                                                                  以上总结是基于网上查询资料汇总所得,如有雷同,请自行理解本文为转载自雷同文件

    脚步匆匆
  • 相关阅读:
    AcWing 372. 棋盘覆盖 二分图最大匹配
    LeetCode 1011. 在 D 天内送达包裹的能力 二分
    AcWing 920. 最优乘车 BFS DIJKSTRA SPFA 方法
    AcWing 903. 昂贵的聘礼 spfa dijstra
    Leetcode 209. 长度最小的子数组 双指针
    AcWing 1111. 字母 bfs dfs两份代码
    AcWing 904. 虫洞 spfa 图论
    深入学习微框架:Spring Boot
    深入学习微框架:Spring Boot
    spring boot web相关配置
  • 原文地址:https://www.cnblogs.com/yj-lm/p/11910518.html
Copyright © 2020-2023  润新知