多亏了我对其他问题的回答,我现在了解Linux上的FIFO,即/dev/xconsole
缓冲区限制为64 KB。
如何将这个限制增加到128 KB?
显然,我将需要重新编译内核。很好,但是我必须在哪里更改内核源代码中的大小限制?
更改它是否安全,或者对其他组件有副作用?
我正在使用3.18内核。
从Linux内核2.6.35开始,您可以使用F_SETPIPE_SZ
fnctl()增加管道的大小。非特权用户的值限制为0到当前值fs.pipe-max-size
sysctl
(默认为1 MiB)之间。
您使用的值应大于64 KiB,并且是2的幂。
因此,您可以执行以下操作:
perl -MFcntl -e 'fcntl(STDIN, 1031, 1048576) or die $!' <> /dev/xconsole
(这里F_SETPIPE_SZ在我的系统上被硬编码为它的值,因为fcntl()
我的版本无法使用特定于Linux的值perl
)。
请注意,这fcntl()
并不影响,/dev/xconsole
但/dev/xconsole
打开时已实例化的管道缓冲区(由syslog
任何应用程序在另一端读取消息,因此,在启动syslog之后每次启动时都需要这样做)。
现在,这是否是您应该做的是另一回事。管道是进程间的通信机制。它们并不是要存储数据。对于系统日志条目,64 KiB应该绰绰有余,因为它比典型的日志条目大几个数量级。
在您的情况下,您更有可能遇到问题,即从中读取应用程序的/dev/xconsole
时间不够早或读取速度不够快。
无论如何,我建议不要更改全局默认管道尺寸。
这可以通过更改:
#define PIPE_DEF_BUFFERS 16
(以4 KiB页数表示)到中的其他内容include/linux/pipe_fs_i.h
。并非必须要修改其他东西以反映更改,或者该更改会以意想不到的方式影响其他事情,这并非没有可能。
如果将它的2的幂乘以> = 16,则破裂的可能性较小,但是请注意,它可能会严重影响全局系统性能,尤其是调度行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句