system占用cpu过高_记一次cpu占用过高问题的解决办法

作为一个已经有近4年经验的java程序员,实在不满足于每天的CURD操作,总是想给自己找点有意思的事研究研究,闲来无事,查看服务器java程序cpu占用情况,发现有个java进程cpu占用一直在80%左右,虽然还没有导致程序崩溃,但是看着总是不舒服的。

服务器运行 top 命令,然后按 c 就可以查看程序cpu占用情况

排在第一位的这个占用了80%,还刚好就是我的程序,惭愧惭愧。不过也刚好让我来练手。

找到进程的 PID 16322

然后根据pid查出该进程中所有的线程 top -Hp 16322

找到cpu占用最高的线程的 PID 16388

注意:我这里截得图是我优化之后的,之前的图忘了保存,意思是一样的,找到cpu占用最高的线程的pid即可,pid转为16进制--->4004

然后执行命令: jstack 16322|grep 4004 -A 30 查看该线程打印的堆栈,看看到底是哪里的代码有问题。

由堆栈信息可以看出我代码中的69行可能有问题。打开代码

这行代码其实完成的功能也简单,就是把字符串转为一个List对象,用的是 net.sf.json.JSONArray 这个包的方法。我猜测是这个效率太低导致的,于是main方法对比测试。

拿这个包和fastjson包对比:

运行查看用时:

多次运行发现,fastjson普遍比sf包快近1倍,然后修改代码,替换工具类为fastjson,提交代码,再次运行。

可以看到,cpu占用从之前的80%左右立马降到了百分之十几,哈哈哈,真爽!

作为一个已经有近4年经验的java程序员,实在不满足于每天的CURD操作,总是想给自己找点有意思的事研究研究,闲来无事,查看服务器java程序cpu占用情况,发现有个java进程cpu占用一直在80%左右,虽然还没有导致程序崩溃,但是看着总是不舒服的。 服务器运行 top 命令,然后按 c 就可以查看程序cpu占用情况 排在第一位的这个占用了80%,还刚好就是我的程序,惭愧惭愧。不过也刚好让我来练手。 找到进程的 PID 16322 然后根据pid查出该进程中所有的线程 top -Hp 16322 找到cpu占用最高的线程的 PID 16388 注意:我这里截得图是我优化之后的,之前的图忘了保存,意思是一样的,找到cpu占用最高的线程的pid即可,pid转为16进制--->4004 然后执行命令: jstack 16322|grep 4004 -A 30 查看该线程打印的堆栈,看看到底是哪里的代码有问题。 由堆栈信息可以看出我代码中的69行可能有问题。打开代码 这行代码其实完成的功能也简单,就是把字符串转为一个List对象,用的是 net.sf.json.JSONArray 这个包的方法。我猜测是这个效率太低导致的,于是main方法对比测试。 拿这个包和fastjson包对比: 运行查看用时: 多次运行发现,fastjson普遍比sf包快近1倍,然后修改代码,替换工具类为fastjson,提交代码,再次运行。 可以看到,cpu占用从之前的80%左右立马降到了百分之十几,哈哈哈,真爽!
经验分享 程序员 微信小程序 职场和发展