mmap能否在nagios rrd文件上生成大量文字?

时间:2017-04-05 16:50:22

标签: mmap nagios

检查存储使用问题我发现nagios会产生大量的文件写入。在这个问题之后,我通过strace

检查了系统调用centOS 6.8
#strace -f -p $nagiosServicePID

[pid 32544] open("/opt/nagios/pnp/var/perfdata/sw-int02/If_GigabitEthernet1_0_29.rrd", O_RDWR) = 5
[pid 32544] fstat(5, {st_mode=S_IFREG|0644, st_size=4217672, ...}) = 0
[pid 32544] fadvise64(5, 0, 0, POSIX_FADV_RANDOM) = 0
[pid 32544] mmap(NULL, 4217672, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x7f252fc3c000
[pid 32544] madvise(0x7f252fc3c000, 4217672, MADV_RANDOM) = 0
[pid 32544] madvise(0x7f252fc3c000, 128, MADV_WILLNEED) = 0
[pid 32544] madvise(0x7f252fc3c000, 1320, MADV_WILLNEED) = 0
[pid 32544] madvise(0x7f252fc3c000, 1440, MADV_WILLNEED) = 0
[pid 32544] madvise(0x7f252fc3c000, 16, MADV_WILLNEED) = 0
[pid 32544] fcntl(5, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
[pid 32544] msync(0x7f252fc3c000, 4217672, MS_ASYNC) = 0
[pid 32544] munmap(0x7f252fc3c000, 4217672) = 0
[pid 32544] close(5)                    = 0

它建议我nagios打开rrd文件,写入内存映射并将该内存映射同步回磁盘。 我很担心即使rrd文件被修改为4个字节,完整的rrd文件也会被重写到磁盘上。它简单地杀死了昂贵的SSD。

这可能是这个巨大的磁盘写入的原因吗?

是否可以使用nagios以某种方式减少磁盘写入?

1 个答案:

答案 0 :(得分:1)

您使用的是PNP,这意味着写入RRD文件的实际文件位于 _sliders_item[_sliders_counter].setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(final View v, MotionEvent event) { Handler hndlr = new Handler(); Runnable _run = new Runnable() { @Override public void run() { ClipData data = ClipData.newPlainText("", ""); View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); v.startDrag(data, shadowBuilder, v, 0); v.setVisibility(View.INVISIBLE); _t1.setText("executed"); _t1.show(); } }; if (_enable_editor) { if (event.getAction() == MotionEvent.ACTION_DOWN) { hndlr.postDelayed(_run,1000); //return true; } if (event.getAction() == MotionEvent.ACTION_UP){ _t1.setText("menu"); _t1.show(); hndlr.removeCallbacks(_run); //return true; } } return _enable_editor; } }); ,而不是Nagios本身。正在进行写作的函数称为process_perfdata.pl。您所要求的实质上是RRDtool的限制。

如果你写这篇文章看起来很昂贵,你可能想看看设置RRDcached。 RRDcached将记录需要对特定目录中的RRD文件进行的所有写入,然后以指定的时间间隔同时更新它们。

您还可以确保您有足够的缓冲区缓存,以便所有RRD文件块在内存中实质更新,并且对磁盘的更改不太零散。您可以通过确保机器有足够的可用内存来完成此操作。

此外,您可以调整您的RRD文件(或PNP4Nagios - 我们将在一秒钟内完成)以存储更少的信息,以便它们的整体尺寸更小一些。这里的权衡是你最终会得到较少的历史性能数据。这对您来说可能是也可能不是问题。

您可以通过查看data2rrd/usr/local/nagios/etc/pnp/rra.cfg来调整PNP。那些文件位于我的系统上,您的里程可能会有所不同。

最后:确保您的系统使用的是最新版本的RRDtool。如果您通过/usr/local/nagios/etc/pnp/process_perfdata.cfgyum安装,则可能会有点过时。我强烈建议从源代码编译,因为许多性能改进和错误修复已经在多年来找到了应用。

您可以在此处找到有关RRDtool的更多信息:http://oss.oetiker.ch/rrdtool/index.en.html

希望这有帮助!