在 CentOS 上运行 Filebeat 时,如果你想限制其使用的资源(CPU、内存、文件句柄、I/O 等),可以从 系统层(systemd / cgroup)、Filebeat 自身配置 两个方向来做。下面按实用程度整理。
CentOS 7/8 中 Filebeat 一般是以 systemd 服务运行的。
sudo systemctl edit filebeat
添加如下内容(示例:限制 CPU、内存):
[Service]
# 限制内存
MemoryLimit=512M
MemoryMax=512M
# 限制 CPU(100000 微秒 = 1 CPU 核心的 10%)
CPUQuota=10%
# 限制进程数
TasksMax=64
# 文件句柄限制
LimitNOFILE=65536
保存后执行:
sudo systemctl daemon-reload
sudo systemctl restart filebeat
| 参数 | 说明 |
|---|---|
MemoryMax |
最大内存(CentOS 8+) |
MemoryLimit |
最大内存(CentOS 7) |
CPUQuota |
CPU 使用百分比 |
TasksMax |
最大线程/进程数 |
LimitNOFILE |
文件描述符上限 |
filebeat.inputs:
- type: log
paths:
- /var/log/*.log
scan_frequency: 10s # 降低扫描频率
filebeat.registry.flush: 30s
max_procs: 2 # 限制 Go 运行时使用的 CPU 核心数
max_procs在filebeat.yml中直接加即可。
filebeat.inputs:
- type: log
ignore_older: 24h
close_inactive: 5m
clean_inactive: 72h
减少 Filebeat 长期占用文件句柄。
如果你 不用 systemd 管理 Filebeat,可以用 cgroup:
cgcreate -g cpu,memory:/filebeat
cgset -r memory.limit_in_bytes=536870912 filebeat
cgset -r cpu.cfs_quota_us=10000 filebeat
cgexec -g cpu,memory:/filebeat /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml
CentOS 上可配合:
ioniceionice -c 2 -n 7 filebeat ...
IOWeight[Service]
IOWeight=100
[Service]
MemoryMax=512M
CPUQuota=20%
IOWeight=100
LimitNOFILE=65536
并配合:
scan_frequency: 10s
close_inactive: 5m
max_procs: 2
如果你愿意,可以告诉我:
我可以给你一份可直接复制使用的完整配置。