首先需要找到需要进行调优的进程。

通过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的性能跳优的更多相关文章

  1. 2020年薪30W的Java程序员都要求熟悉JVM与性能调优!

    前言 作为Java程序员,你有没有被JVM伤害过?面试的时候是否碰到过对JVM的灵魂拷问?   一.JVM 内存区域划分 1.程序计数器(线程私有) 程序计数器(Program Counter Reg ...

  2. 最全JVM与性能调优知识点总结,看看哪些是你还没掌握的?

    前言 JVM调优是每个高级程序员的必修课,在本章中,我会从发展过程以及核心价值来剖析JVM的体系结构.为了让大家更好的理解JVM的工作机制, 我会在讲解完运行时数据区之后,再通过一个类的加载过程到这个 ...

  3. Tomcat和JVM的性能调优总结

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  4. Jvm:性能调优监控工具

    现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 .... ...

  5. 《Tomcat和JVM的性能调优你真的学会了吗?》总结篇

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  6. 一份 Tomcat 和 JVM 的性能调优经验总结!拿走不谢

    Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建 ...

  7. 性能优化 | Tomcat和JVM的性能调优总结

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  8. jvm 的性能调优

    一个描述的比较生动的博客:JVM内存区域划分Eden Space.Survivor Space.Tenured Gen,Perm Gen解释 地址:https://www.cnblogs.com/sg ...

  9. java jvm eclipse 性能调优

    低配配置 -Dfile.encoding=UTF-8-Xms960m-Xmx960m-Xmn384m-Xverify:none-Xss256k-XX:MaxTenuringThreshold=2-XX ...

随机推荐

  1. 如何使CSS--better(系列二)

    上一篇文章(如何使CSS--beter 系列一)中  分析了一下 什么样子的代码是高效的 应该避免什么样子的代码, 那么什么样子的代码是更容易扩展的? 什么代码是更好维护的? 什么代码是更好的? 下边 ...

  2. XSD文件详解(二)

    <?xml version="1.0" encoding="gb2312"?> <studentlist>   <student  ...

  3. MySQL查询优化程序

    1.利用EXPLAIN 语句,查看是否用到索引: EXPLAIN 2.下面的WHERE 子句说明了怎样进行这项工作.第一行中,优化程序将简化表达式4/2 为值2,然后使用my_col 上的索引快速地找 ...

  4. 初识Modbus TCP/IP-------------C#编写Modbus TCP客户端程序(一)

    转自:http://blog.csdn.net/thebestleo/article/details/52269999 首先我要说明一下,本人新手一枚,本文仅为同样热爱学习的同学提供参考,有不 对的地 ...

  5. Netbeans8.0设置Consola字体并解决中文乱码问题

    在Netbeans8.0上开发php,设置字体为Consola后.发现中文显示是乱码的.经过改动jre的配置文件成功攻克了这个问题. 1. 进入jdk安装文件夹下/jre/lib文件夹,找到fontc ...

  6. 拉普拉斯分布(Laplace distribution)

    拉普拉斯分布的定义与基本性质 其分布函数为 分布函数图 其概率密度函数为 密度函数图 拉普拉斯分布与正太分布的比较 从图中可以直观的发现拉普拉斯分布跟正太分布很相似,但是拉普拉斯分布比正太分布有尖的峰 ...

  7. Springmvc注解启用

      http://www.blogbus.com/wanping-logs/235898637.html 使用注解的原因 最方便的还是启用注解 注解方便,而且项目中很流行. 配置文件尽量减少,主要使用 ...

  8. 深入理解ByteBuffer(转)

    转:http://blog.csdn.net/workformywork/article/details/26699345?utm_source=tuicool&utm_medium=refe ...

  9. IOS蓝牙开发模块

    一.引言 蓝牙是设备近距离通信的一种方便手段,在iPhone引入蓝牙4.0后,设备之间的通讯变得更加简单.相关的蓝牙操作由专门的 CoreBluetooth.framework进行统一管理.通过蓝牙进 ...

  10. Hadoop如何修改HDFS文件存储块大小

    一. 临时修改可以在执行上传文件命令时,显示地指定存储的块大小.1. 查看当前 HDFS文件块大小我这里查看HDFS上的TEST目录下的jdk-7u25-linux-x64.gz  文件存储块大小.1 ...