如何减少 Logstash 内存使用
How to decrease Logstash Memory Usage
我在独立系统(无云或集群)中使用 Logstash-5.6.5(在 Windows)运行ning。计划查看一些日志文件并 post 到本地 运行 elasticsearch。但是当检查 Logstash 的内存使用情况时,如果没有配置来查看任何文件,它会显示大约 600MB 的内存使用情况。当我进一步添加输入文件管道配置时,它会进一步增加内存(对于观看 3 个日志文件,它增加了 70MB,但我计划添加最多 20 个日志)。
1.这是预期的行为吗?
2。有什么办法可以减少 logstash 占用大量内存吗?
经过几天的研究,下面是我对问题的回答。
以下是我们可以优化 Logstash 内存的方法:
Logstash 内存使用量主要按堆大小累积。这可以通过在环境变量 LS_JAVA_OPTS 中设置堆内存大小来有效控制,如下所示,在启动 Logstash 之前(在我的例子中是 Windows 版本):
set "LS_JAVA_OPTS=-Xms512m –Xmx512m"
否则可以在文件开头的setup.bat中添加。
通过这种方式,我将 Logstash 总内存使用量限制为最大 620 MB。
- Logstash 管道配置 (input/filter/output) 可以使用提到的方法进行优化 here。
通过这种方式我断言我的 Logstash 过滤器配置是否已优化。
还可以使用下面的几个属性优化管道输入文件配置到 ignore/close 旧日志文件,如 here 所述,这将防止不必要地创建管道线程。
- ignore_older - 以秒为单位 - 完全忽略任何早于给定秒数的文件
- max_open_files - 数字 - 优化最大打开文件数
- close_older - 以秒为单位关闭旧文件
- exclude - 不需要的文件名数组(带或不带通配符)
在我的例子中,我被要求只看最近的文件而忽略旧的文件,我已经相应地设置了如下配置:
input {
file {
#The application log path that will match with the rolling logs.
path => "c:/path/to/log/app-1.0-*.log"
#I didn't want logs older than an hour.
#If that older file gets updated with a new entry
#that will become the new file and the new entry will be read by Logstash
ignore_older => 3600
#I wanted to have only the very recent files to be watched.
#Since I am aware there won't be more then 5 files I set it to 5.
max_open_files => 5
#If the log file is not updated for 5 minutes close it.
#If any new entry gets added then it will be opened again.
close_older => 300
}
}
我在独立系统(无云或集群)中使用 Logstash-5.6.5(在 Windows)运行ning。计划查看一些日志文件并 post 到本地 运行 elasticsearch。但是当检查 Logstash 的内存使用情况时,如果没有配置来查看任何文件,它会显示大约 600MB 的内存使用情况。当我进一步添加输入文件管道配置时,它会进一步增加内存(对于观看 3 个日志文件,它增加了 70MB,但我计划添加最多 20 个日志)。
1.这是预期的行为吗?
2。有什么办法可以减少 logstash 占用大量内存吗?
经过几天的研究,下面是我对问题的回答。
以下是我们可以优化 Logstash 内存的方法:
Logstash 内存使用量主要按堆大小累积。这可以通过在环境变量 LS_JAVA_OPTS 中设置堆内存大小来有效控制,如下所示,在启动 Logstash 之前(在我的例子中是 Windows 版本):
set "LS_JAVA_OPTS=-Xms512m –Xmx512m"
否则可以在文件开头的setup.bat中添加。
通过这种方式,我将 Logstash 总内存使用量限制为最大 620 MB。
- Logstash 管道配置 (input/filter/output) 可以使用提到的方法进行优化 here。
通过这种方式我断言我的 Logstash 过滤器配置是否已优化。
还可以使用下面的几个属性优化管道输入文件配置到 ignore/close 旧日志文件,如 here 所述,这将防止不必要地创建管道线程。
- ignore_older - 以秒为单位 - 完全忽略任何早于给定秒数的文件
- max_open_files - 数字 - 优化最大打开文件数
- close_older - 以秒为单位关闭旧文件
- exclude - 不需要的文件名数组(带或不带通配符)
在我的例子中,我被要求只看最近的文件而忽略旧的文件,我已经相应地设置了如下配置:
input {
file {
#The application log path that will match with the rolling logs.
path => "c:/path/to/log/app-1.0-*.log"
#I didn't want logs older than an hour.
#If that older file gets updated with a new entry
#that will become the new file and the new entry will be read by Logstash
ignore_older => 3600
#I wanted to have only the very recent files to be watched.
#Since I am aware there won't be more then 5 files I set it to 5.
max_open_files => 5
#If the log file is not updated for 5 minutes close it.
#If any new entry gets added then it will be opened again.
close_older => 300
}
}