针对Java程序
top + jstack
1、使用linux的top命令找到占用cpu资源最多的java程序
2、使用top -Hp java进程id 找到占用资源最多的java线程
3、使用 printf %x 36044 将十进制线程id转化成十六进制
4、使用jstack 1614455 > stack.txt 将进程(1614455)线程信息输出到stack.txt文件中
5、cat stack.txt | grep -A 30 (线程id的十六进制形式)
jmc
导致cpu占用过高的场景与解决方案
1、无限 while 循环
尽量避免无限循环
让循环执行的慢一点
2、频繁gc
降低GC频率
3、频繁创建新对象
合理使用单例
4、序列化和反序列化
选择合理的API实现功能
选择好用的序列化和反序列化类库
*XStream在反序列化大对象时有严重 的性能问题(ObjectInputStream代替)
5、正则表达式
减少字符匹配期间执行的回溯
6、频繁的线程上下文切换
降低切换的频率(https://blog.youkuaiyun.com/ityouknow/article/details/80851338)