一段时间后,mod_perl 脚本不再查看文件系统

一段时间后,mod_perl 脚本不再查看文件系统

我在 Ubuntu 16.04 下的 VPS 上使用 Apache 2.4.18 下的 mod_perl 脚本。脚本从磁盘打开文件(网页模板)。有时,它们会停止查看这些文件,服务器错误日志中充满了以下错误:

[TIME] [:error] [pid PID:tid TID] 文件错误 - FILENAME: 未找到\n

当 Perl 函数返回 false 时,Template 包会生成这些消息open()。Apache 重新启动后,文件再次可见,但只持续一段时间。过了一会儿,问题又出现了。

这种行为的原因是什么?

答案1

也许 mod_perl/apache 没有正确关闭文件句柄。一段时间后,当达到打开文件的最大数量(1024 个软文件/4096 个硬文件,请参阅ulimit -Sn;ulimit -Hn)时,apache 重新启动会关闭所有过时的句柄。

下次发生错误时,您可以通过从 apache/perl 获取 pid 来研究这个理论。

# ps aux | grep apache

或者

# pidof apache

或者 perl 模块(如果它有自己的进程)..

示例输出:

28294

列出由 PID 打开的文件

# lsof -p 28294
# lsof -a -p 28294
# counting
# lsof -a -p 28294| wc -l

或者

# cd /proc/28294/fd
# ls -l | less
# count open files with
# ls -l | wc -l

相关内容