日志文件的增长不会超过一定大小。为什么?

日志文件的增长不会超过一定大小。为什么?

我们有一个基于 java 的 Web 应用程序在 CentOS 6.0 64 位上运行,它会写出许多日志文件。logrotate使用dailycopytruncate和其他几个选项每天轮换一些文件。

一个这样的特定日志文件在恰好“102400000”字节时停止增长。该过程继续正常运行。但那时日志中没有写入任何内容。

stat对文件做了一个操作watch,查看在达到“102400000”字节大小后修改时间是否发生变化,但事实并非如此。文件没有任何反应。它只是保持原样。继续写入同一目录中的其他日志文件。

另一个 StackExchange 问题中提到的事情这里请勿应用。我检查并重新检查是否设置了提到的 ulimit 选项,但没有任何设置。

执行strace -f -p PID显示该进程正在尝试写入,但遇到“文件太大”和“超出文件大小限制”消息:

[pid  5679] write(1, "\n\n\n\n\n23-01-2013 12:00:46:921  Av"..., 128) = -1 EFBIG (File too large)
[pid  5679] --- SIGXFSZ (File size limit exceeded) @ 0 (0) ---

我如何找到对文件大小施加此限制的原因。同一目录中的其他日志文件非常大(大小大于 1Gb),并且没有此类问题。

答案1

因此(根据您的评论),毕竟ulimit(导致SIGXFSZEFBIG)解释了为什么日志的大小不能变得更大。

您可以通过以下方式确认:

grep 'Max file size' "/proc/$pid/limits"

(其中$pid是要写入该文件的 java 进程的 id)。

它可能是由进程本身设置的(在 strace 输出中检查setrlimit或),也可以由启动的包装脚本或 java 应用程序设置(查找)。ulimitjavaulimit -f 100000

相关内容