Logstash占用CPU高的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Logstash占用CPU高的问题相关的知识,希望对你有一定的参考价值。

参考技术A 使用 top 命令查看USER为logstash的进程占用CPU达到200%~300%

查看前面第一个描述,发现queue目录没有读权限

3、继续更改权限,发现还有如下报错

4、注意如下报错
at line 4, column 17 (byte 53) after input \n beats \n type => beats\n host => 10.1
发现是beats这个配置文件的问题,尝试将其删除,cpu高的问题解决

java 多线程 cpu 占用率高的问题

我写了一个多线程下载的小程序,我创建了10个线程同时下载,cpu占用率很高,不知道是什么原因,请大家帮忙,主要代码如下
public class test implements Runnable

public InputStream in=null;
public FileOutputStream out=null;

@Override
public void run()


//打开网络连接获取 inputstream 对象
//略........
this.out = new FileOutputStream(this.filepath,true);
byte[] bytes = new byte[4096];
while((c = this.in.read(bytes))!= -1) // c 是从网络连接取得的inputstream

this.out.write(bytes,0,c);

this.out.close();
this.in.close();



另外问一下, bytes为4096字节 会不会溢出,如何避免溢出?
几位有没有办法让CPU占用率降下来,用buffered的文件流可以让cpu降下来吗,我试一下,别的地方还有什么要改的,请大家多指导?

不会溢出字节数最好是最小磁盘空间簇的倍数,或者整块内存空间字节数。那么不会太浪费资源。请问你是不是使用线程池,如果使用创建线程对象的方式太浪费资源了。
楼主有没有使用线程池,如果没有你是不是使用固定数量的线程还是不定数量的线程。

使用BUFFER可以提高读写效率
参考技术A CPU 占用率高是很正常的事情,个人觉得(饿,我是老白...不是高手..)
我也不知道你这个CPU占用率具体”多高“,因此也不好判断你这么高是不是正常

其次,溢出问题。
4096一般够用了,你可以想象一下一般的键盘输入缓存是多大就知道了
你不放心的话可以加一个try catch语句。本回答被提问者采纳
参考技术B cpu占用高很正常,十个线程而且你while里只是写入。cpu开销当然会很大
4096 4K,十个40K 输入输出流 对内存来说可以忽略不计
参考技术C I see a potential problem of your implementation. It might unnecessarily invoke too many times the underlying file system's write method which is expensive. You can use buffered output stream to avoid it:

...
public OutputStream out=null;
...
this.out = new BufferedOutputStream(new FileOutputStream(this.filepath,true));

以上是关于Logstash占用CPU高的问题的主要内容,如果未能解决你的问题,请参考以下文章

ELK+Filebeat+Kafka分布式日志管理平台搭建

ELK——Filebeat介绍及部署

Logstash实践

优化ELK

为什么logstash进程的CPU使用率100%?

为啥logstash进程的CPU使用率100