破晓·强袭 2024-02-29 17:59 采纳率: 0%
浏览 18

windows使用telegraf后台采集时内存不断变大?

Windows server 2012操作系统;
使用telegraf 采集系统数据,进程占用内存一直增大;
配置采集系统cpu、磁盘的conf文件,1分钟采集一次输出一次;

[global_tags] 
  region='123'
  type='456'
 [agent]
  interval = "60s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "60s"
  flush_jitter = "0s"
  precision = "0s"
  debug = true
  hostname = ""
  omit_hostname = true
 
#cpu
 [[inputs.cpu]]
   percpu = true
   totalcpu = true
   collect_cpu_time = false
   report_active = false
   core_tags = false
   fieldpass = ["*usage*"]
#内存
 [[inputs.mem]]
#   fieldpass = ["used_percent"]
#磁盘
 [[inputs.disk]]
#磁盘io吞吐
[[inputs.diskio]]
#fieldpass = ["reads","writes","read_bytes","write_bytes"] 
#网卡   
 [[inputs.net]]
 ignore_protocol_stats = true
#系统运行时间
 [[inputs.system]]
   fieldpass = ["uptime*"]  
#网速?
# [[inputs.internet_speed]]  
 
[[aggregators.merge]]
drop_original = true

[[outputs.file]]
  files = ["stdout"]
  data_format = "json"

把执行的采集命令写到test.bat文件中:

@echo off
cd C:\telegraf\telegraf-1.29.5_windows_amd64\telegraf-1.29.5
.\telegraf.exe --config .\work-telegraf.conf  >> test.log 2>>&1

然后在powershell中后台执行这个bat脚本
Start-Process -WindowStyle Hidden -FilePath "test.bat"
最后使用tasklist命令查看进程内存占用情况
tasklist | findstr telegraf
发现内存占用虽然增长的慢,但却是曲线增大的,通过任务管理器发现大概率是内存(专用工作集)增大引起的。
现在不知道该怎么控制不断增大的内存?

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-02-29 17:59
    关注

    破晓·强袭 下午好🌅🌅🌅
    本答案参考通义千问

    问题分析: 内存占用在使用Telegraf后台采集系统数据时持续增长,可能是因为Telegraf在处理和存储数据时没有正确释放旧的数据。配置中的metric_buffer_limitflush_interval可以帮助限制内存使用,但是如果没有正确配置或者数据量过大,内存占用仍会持续增长。

    解决方案:

    1. **调整metric_buffer_limit:**此参数用于设置Telegraf在内存缓冲区满之前可以存储多少条数据。默认值为10000,如果内存消耗过大,可以适当减小这个值。例如:

      metric_buffer_limit = 5000
      
    2. **增加flush_interval:**此参数定义了Telegraf写入数据到输出存储的时间间隔。如果你发现内存占用增长过快,可能需要增加这个值以减少内存压力。比如:

      flush_interval = "120s"
      
    3. **启用数据清理策略:**Telegraf有一个aggregators部分,可以添加aggregator配置来合并或清理旧数据。例如,可以考虑使用aggregators.flush来定期清除数据:

      [[aggregators.flush]]
        data_age = "1h"  # 清理超过1小时的数据
        data_points = 10000  # 清理超过10000个数据点
        tagpass = ["region", "type"]  # 只清理指定标签的数据
      
    4. **限制输出格式:**虽然你已经将输出格式设为JSON,但确保fieldpass只包含必要的字段,避免不必要的数据存储。例如,只保留关键字段:

      [[outputs.file]]
        files = ["stdout"]
        data_format = "json"
        fieldpass = ["cpu_usage", "mem_used_percent", "disk_usage", "network_traffic"]  # 更改为实际采集的字段
      
    5. **定期重启Telegraf:**如果内存占用始终无法得到有效控制,你可以尝试定期(如每小时)重启Telegraf进程,以释放内存资源。

    6. **检查数据持久化:**确认输出的文件是否被正确写入并及时清理,避免数据堆积导致内存占用过高。如果使用的是文件输出,确保日志文件大小或数量设置合理。

    **注意:**上述调整需根据实际情况进行,过度减小可能会导致数据丢失或采样频率降低。在调整参数时,务必测试其对业务的影响。

    评论

报告相同问题?

问题事件

  • 修改了问题 2月29日
  • 创建了问题 2月29日