java系统性能分析
netstat -ano | findstr 31900
注意最后是pid
堆栈的作用:
线程死锁分析
辅助CPU过高分析
线程资源不足分析
性能瓶颈分析
关键线程异常退出
Windows:在运行java的控制台上按ctrl+break组合键 _ usefull?
wait() —— 会释放监视锁
sleep() —— 与锁操作无关,继续保持监视锁
Found one Java-level deadlock:
第三步:预处理前两个获取的堆栈信息,去掉处于sleeping或waiting的状态的线程。
例如如下线程处于wait或者sleep状态,
这种线程是不消耗CPU的,因此这些线程可以直接忽略掉,重点关注其它线程:
第五步:对比预处理后的1,2堆栈信息,找出处于busy状态的线程,该类线程可能是导致cpu高占用率的可疑线程。
例如
同一个线程在第二个堆栈信息中仍处于活跃状态
两次打印堆栈该线程一直在运行,说明该线程已运行了5分钟,请在代码中检查该线程是否属于长时间运行线程?如果属于暂态线程,如此长时间运行说明可能有死循环等导致的CPU过高
常见架构和设计问题:
不恰当的线程同步
不良的架构(同步/异步使用不当)
并发设计不当-资源抢占导致的资源竞争, 连接池和线程池等应用不当等
效率低下的通信方式
数据库连接等竞争资源参数设置不当
内存泄漏/不恰当的虚拟机运行参数
缓慢的磁盘/网络 IO
… …
常见编码问题
String +,getByte()的不恰当使用:很多时侯可以使用StringBuf
过大的同步范围
SQL语句设计不当
能够发现的性能问题:
(1) 资源争用
(2) 锁的粒度过大
(3) sleep的滥用
适用场合:
识别只有在高负载的时候才出现的性能瓶颈。
多线程场合
不适用的场合:
单操作单线程下的代码段耗时分析,如一次界面点击,感觉迟缓。
方法: Java 命令行中增加 –verbose:gc 运行参数
可以调节的JVM 垃圾回收参数
IBM JDK:主要参数: -Xconcurrentbackground –Xconcurrentlevel, 以及堆大小。
SUN,HP JDK 主要是 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction
.
常见的内存泄露
(1) 全局HashMap等容器,在对象不需要后没有及时从容器中remove掉
特别是在抛出异常的时候,一定要确保remove方法执行到。
(2) Runnable对象new了就必须使用线程来Run等
?? 可以按照如下思路分析GC输出,能够初步比较准确地判断系统是否存在内存泄漏:
?? (1) 首先要确保系统已经稳定运行(如初使化等已经完成等) (这个条件很重要)
?? (2) 然后取一个时间段的GC 输出作为分析数据,只分析FULL GC的行,以垃圾回收后的值为分析对象
?? (3) 然后根据GC分析内存的使用情况:
?????? A. 如果当前使用内存持续增长, 而垃圾回收后内存也持续增长, 有一直增长到Xmx设置的内存的趋势,
那么这个时侯基本上就可以断定有内存泄漏问题了.
?????? B. 如果当前使用内存增长到一个值之后,又能回落, 达到一个动态平衡, 那么就没有内存泄漏的情况.
(1) 只有FULL GC的行才有分析价值
(2) 只需要检查完全垃圾后剩余的内存值是否一直再增大。
OptimizeIt
snoop抓包工具/ethereal
阿萨德发是否
相关文章
- JVM性能优化, Part 5:Java的伸缩性
- Java基础__Java中异常处理那些事
- Java 开发环境配置--eclipse工具进行java开发
- 【Java】java扩展机制SPI 实现
- Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!
- JAVA学习(一):Java介绍及其平台、开发环境的配置与搭建
- Java实现 LeetCode 707 设计链表(环形链表)
- Java实现 LeetCode 486 预测赢家
- java实现第三届蓝桥杯排日程
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- 【JAVA】毕向东Java基础视频教程-笔记
- 【JAVA】 01-Java基础知识
- 【JAVA】毕向东Java基础视频教程-笔记
- Java内存图以及堆、栈、常量区、静态区、方法区的区别
- Java爬虫搜索原理实现
- java.util.concurrent.TimeoutException: Idle timeout expired: 300000/300000 ms
- Atitit 深入理解命名空间namespace java c# php js
- paip.提升性能---jvm java 工具使用.
- paip.字符串操作uapi java php python总结..
- How to improve Java's I/O performance( 提升 java i/o 性能)
- java 枚举(enum) 全面解读
- JAVA编程:java环境安装和helloworld
- 解决idea出现的java.lang.OutOfMemoryError: Java heap space的问题
- Java通过PDF模板导出数据 adobe acrobat的PDF编辑器 itextpdf java导出文件输出流
- Java如何获取IP属地 ip2region failed to create searcher with x:java.io.FileNotFoundException:( 系统找不到指定的路径)
- java中的transient 详细总结Java中transient关键字 对象写出流ObjectOutputStream 对象写入流ObjectInputStream
- java-JProfiler(三)-进行本地JVM的性能监控-监视本地java程序
- JAVA性能优化的五种方式
- java中接口的定义与实现
- Java:openjdk: error: Student is abstract; cannot be instantiated;java编译环境
- Java序列化详解
- java运算符
- 【java】Java并发编程--Java实现多线程的4种方式
- 【java】Java并发编程系列-基础知识(非常详细哦)