CPU高的解决方法(flume)
我不是创造者,只是搬运工,望大家提出宝贵意见。
第一种方法:
网上各种解决方法(自己新手,不知道解决思路):
首先比较靠谱的两篇文章,找到CPU高的线程;方法见连接:
以上两篇对工具介绍较少,看不懂的看下面两篇博客:
Windows篇:https://my.oschina.net/hexin1/blog/125136 工具名:Process Explorer v15.3
对JPS,jstack,Jconsole,VisualVM不了解的,自己看看,都是JDK自带的工具。在安装jDK的目录下,我的在C:Program FilesJavajdk1.7.0_80in;
虽然,抓取到了CPU最高的线程,研究源码还是能力不够,就硬着头皮改些。各种离愁呀。
第二种方法:
之前,也想过大对象,新生代GC的频率过高导致的CPU较高。用工具看堆,新生代,老生待等各种参数。排除了大对象(原因很简单老年代的GC频率并不高并且时间不长),由于对新生代的GC频率的判断标准不知道,发现堆得内存足够,就一直带着疑惑走下去。
后来看到了下面的博客:
堆新生代的GC频率等参数,有着标准的界限。
主要命令:
top linux查看进程占用cpu的情况,从高到低排序
ps -mp pid 查看进程下的线程的cpu占用情况
jstack pid > log 把pid的内容以管道的形式存储到log文件中
使用第一种方法,找到了cpu高的方法,是文件数量过多时,File类下的listFiles()这个方法造成的。
代码中是通过定时器进行文件扫描,扫描频率为5个线程每秒扫描一次。
然后修改了扫描的频率和实现方式,改为1个线程扫描,每5s扫描一次。