如果我想立即查看 apache2 服务器的所有相关日志文件,我使用
tail -f /var/kunden/logs/*log /var/kunden/logs/*log /var/log/apache2/*log |grep -v robots|grep -v favicon
但由于现在这些文件太多了,我想增加该限制。
如何为一个 ssh 会话增加它?我怎样才能在全球范围内增加它?
我可以看到我的机器上的打开文件限制为 1024:
ulimit -n
1024
答案1
重要的是要知道有两种限制:
- A硬限制只能由 root 进行配置。这是软限制的最高可能值(限制)。
- A软限制普通用户即可设置。这是实际生效的限制。
单个会话的解决方案
在 shell 中设置软限制:
ulimit -Sn 2048
此示例将实际限制提高到 2048,但仅当硬限制(检查:)ulimit -Hn
相同或更高时该命令才会成功。如果您需要更高的值,请使用以下方法之一提高硬限制。这些限制是按进程设置的,并且由新生成的进程继承,因此在同一 shell 中执行此命令后运行的任何内容都将具有新的限制。
在单个会话中更改硬限制
这并不容易,因为只有 root 可以更改硬限制,并且切换到 root 后您必须切换回原始用户。这是解决方案sudo
:
sudo sh -c "ulimit -Hn 9000 ; exec su \"$USER\""
全系统解决方案
在 Debian 和许多其他使用的系统中,pam_limits
您可以/etc/security/limits.conf
在/etc/security/limits.d
. conf 文件包含描述。示例行:
@webadmins hard nofile 16384
@webadmins soft nofile 8192
webadmins
这将为登录后组内的用户设置硬限制和默认软限制。
其他限制
硬限制值受到打开文件描述符值的全局限制的限制,/proc/sys/fs/file-max
在现代 Linux 发行版中默认情况下该值相当高。该值受到NR_OPEN
内核编译期间使用的值的限制。
难道就没有更好的解决办法吗?
也许您可以检查*log
您提供的所有文件是否tail -f
都是真正需要监视的活动文件。其中一些文件可能已关闭以进行日志记录,您只需打开少量文件即可。
答案2
我的 Apache error.log 中有 PHP 警告:
failed to open stream: Too many open files in ...
所以我发现,apache 在启动时单独设置这个值(在我的 Ubuntu 14.04 上)。它配置在/etc/apache2/envvars
.它说:
## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'
所以我不得不调整第三行。