JVM的性能跳优
首先需要找到需要进行调优的进程。
通过jps -v -l -m 找到我需要调优的进程
其中, -m表示输出传入main方法的参数,
-l表示输出的main类或jar包的名字,
-v表示传入JVM的参数
如果想要看到进程中的线程的堆栈信息,使用jstack,现在我们看6478的运行情况。
用top -Hp 6478 ,输出如下:
找到了最费cpu的时间,58秒。线程号是6479
jstack在查询的时候,线程号是用16进制表示的,将6479转换为16进制
printf "%x\n" 6479
获取194f后,使用jstack
这个耗费58秒cpu的线程是main线程,现在在处于waiting on condition 状态。
一般会出现八种状态:
死锁,deadlock
执行中,Runnable
等待资源,Waiting on condition
等待获取监视器,Waiting for monitor entry
暂停,Suspended
对象等待中,Object.wait() 或 TIMED_WAITING
阻塞,Blocked
停止,Parked
死锁:一般情况是多个线程相互资源占用,导致无法释放。
阻塞:线程在执行的过程中,所需要的资源长时间等待却一直未能获取到,被线程管理器标识为阻塞状态,也就是等待资源超时的线程。
waiting on condition : 等待资源,等待某个条件的发生。如果大量出现waiting on condition 可能是某个阻塞导致线程无法进行,比如网络阻塞。导致等待读写。
另一情况是sleep,等待睡眠结束,查看代码发现是sleep导致的,可以接受。
waiting for monitor entry和Object.wait(): 需要了解一下临界区,monitor的概念。
临界区:
临界区就是在同一时刻只能有一个任务访问的代码区。通常用这种加锁实现。
synchronized(object){
//代码块
}
monitor:java对象的内部锁。也叫作monitor锁。(理解可能有偏差)
要想访问临界区首先要获取这个锁,每个java对象都有一把锁。
waiting for monitor entry:也就是在等一个临界区,也就是在Entry Set队列中等待。
此时状态一般都是等待状态。
Object.wait():获取了监视器,又用了java.lang.Object.wait()。
也就是当线程获取monitor,也就是锁,但是发现运行的条件没满足,则调用Object(),放弃monitor,同时,机内Wait entry队列中。
如果大量线程在waiting for monitor entry
可能是一个全局锁锁住了大量的线程,导致其他的线程无法进入临界区。
通过查看进程中线程的堆栈信息。发现运行正常。接下来查看堆内存的使用情况,使用jmap。
查看堆内存中的对象数目
发现有一个对象存活了很多,需要排查一下。
经排查,这个是一个ip库保存对象,有很多个,但是不动态增加了,可以接受。
其实也可以直接使用top,查看耗费资源,如果一段时间内是稳定的,那么程序运行就稳定,也是可以接受的。
接下来查看jvm运行情况:
C 容量 U使用量
E eden O old P Permanent
JVM的性能跳优的更多相关文章
- 2020年薪30W的Java程序员都要求熟悉JVM与性能调优!
前言 作为Java程序员,你有没有被JVM伤害过?面试的时候是否碰到过对JVM的灵魂拷问? 一.JVM 内存区域划分 1.程序计数器(线程私有) 程序计数器(Program Counter Reg ...
- 最全JVM与性能调优知识点总结,看看哪些是你还没掌握的?
前言 JVM调优是每个高级程序员的必修课,在本章中,我会从发展过程以及核心价值来剖析JVM的体系结构.为了让大家更好的理解JVM的工作机制, 我会在讲解完运行时数据区之后,再通过一个类的加载过程到这个 ...
- Tomcat和JVM的性能调优总结
Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...
- Jvm:性能调优监控工具
现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 .... ...
- 《Tomcat和JVM的性能调优你真的学会了吗?》总结篇
Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...
- 一份 Tomcat 和 JVM 的性能调优经验总结!拿走不谢
Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建 ...
- 性能优化 | Tomcat和JVM的性能调优总结
Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...
- jvm 的性能调优
一个描述的比较生动的博客:JVM内存区域划分Eden Space.Survivor Space.Tenured Gen,Perm Gen解释 地址:https://www.cnblogs.com/sg ...
- java jvm eclipse 性能调优
低配配置 -Dfile.encoding=UTF-8-Xms960m-Xmx960m-Xmn384m-Xverify:none-Xss256k-XX:MaxTenuringThreshold=2-XX ...
随机推荐
- Android Studio gradle 文件中 ${supportLibVersion} 用法
一般我们在项目中的gradle会添加如下库文件 dependencies { compile 'com.android.support:appcompat-v7:23.1.0' compile 'co ...
- python 线程安全
http://www.cnblogs.com/monsteryang/p/6592385.html
- MySQL复制经常使用拓扑结构具体解释
复制的体系结构有下面一些基本原则: (1) 每一个slave仅仅能有一个master: (2) 每一个slave仅仅能有一个唯一的serverID: (3) 每一个master能够有 ...
- 【BZOJ3698】XWW的难题 有上下界的最大流
[BZOJ3698]XWW的难题 Description XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核.XWW给你出了 ...
- 【BZOJ4820】[Sdoi2017]硬币游戏 AC自动机+概率DP+高斯消元
[BZOJ4820][Sdoi2017]硬币游戏 Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬 ...
- CAFFE学习笔记(二)Caffe_Example之测试mnist
这一次的博客将接着上一次的内容,简单讲解一下如何使用训练后的网络lenet_iter_5000.caffemodel与lenet_iter_10000.caffemodel. 1.在网络训练完毕后,将 ...
- IntelliJ IDEA 添加类注释模板
效果展示 /** * Created with IntelliJ IDEA * USER:jacun * CLASSNAME: HalloWorldController * DATE: 2019/1/ ...
- JPA 多表分页查询
业务场景:大学生毕业后统计毕业去向.学生实体和毕业去向实体一对一关系. 实体: @Entity @Data @Table(name = "t_s_student") public ...
- Java并发之ArrayBlockingQueue
ArrayBlockingQueue是一个由数组支持的有界阻塞队列.此队列按 FIFO(先进先出)原则对元素进行排序.队列的头部是在队列中存在时间最长的元素.队列的尾部是在队列中存在时间最短的元素.新 ...
- C# 串口调试助手源码
本方法,禁用跨进程错误(做法不太好,但是对于单片机出身的人来说,好理解,能用就行). 基本功能: 1.点串口号的下拉菜单自动当前检索设备管理器的COM 2.发送模式可选,hex和string两种 3. ...