Linux中的错误:toomanyopenfiles

不幸的是,这个“tooomanyopenfiles”错误真的很烦人。
我在调试扫描仪程序时已经遇到过这种情况。
您提到的解决步骤是相当可靠的。
让我为您浏览一下,看看是否有任何需要补充的内容。

上周,一位客户问我为什么他在运行某个数据处理脚本时突然卡住了。
检查后,出现了这个错误。
Linux 对每个进程可以打开的文件数量有限制。
默认值只能是1 02 4 但是,对于某些程序,例如Web服务器或大数据工具,当打开的文件数量太大时,这还不够。

您提到的用于检查当前限制的 ulimit -a 命令确实是最简单的。
我习惯首先使用它来确认哪个用户或进程导致了问题。
ulimit -n 5 1 2 00,暂时增加限制,也可以,但是记住,这仅对当前终端有效,关闭并重新打开后会恢复。
当我在上海数据中心设置系统时,我发现某些用户的默认值太低,并立即更改了系统范围的配置。

当谈到永久修改时,我遇到的一个陷阱是更改/etc/profile。
您认为简单地更改它就足够了,但是您发现某些系统更新会覆盖该文件。
后来我们改用了 PAM 配置(例如,在 /etc/security/limits.conf 中添加软限制),这样更可靠。
rc.local 怎么样?许多较新的系统不再具有此功能,除非您运行的是旧版本的 Debian 或 CentOS,在这种情况下您可以更改它。

测试变更时,除了 ulimit -a 之外,我还会使用 lsof | 等命令wc -l 查看系统上当前打开的文件数量,并确保它不是由其他进程引起的。
更改配置后请务必完全重新启动系统,因为某些缓存会延迟生效。

最后提醒:你提到过资源消耗问题非常严重。
上次我们将生产环境的文件限制提高到1 00,000,但是CPU突然开始频繁冻结。
所以最好先在测试环境中运行一下。
如果进行更改后仍然出现错误,则必须使用 lsof -p 等命令来检查哪个进程占用了太多句柄。
有时第三方库在释放资源方面做得很差。

无论如何,都由你决定。
首先尝试从 ulimit 开始。
如果不起作用,请回复我。

linux标准错误的是什么?

这件事情我必须要仔细的给你解释一下。
上周,一位客户向我询问了Linux中的标准错误,我向他详细解释了这一点。

首先,标准错误可以理解为程序的一个小跟随者。
它就像程序的一个小帮手,专门记录那些不愉快的事情,比如错误信息、警告或者一些状态请求。
在Linux系统中,它有一个特殊的编号,即文件描述符号。
2 ,与标准输出(数字1 )不同。

默认情况下,此标准错误也会显示在屏幕上。
然而,就像你不想一直听到别人说你的错一样,程序也可以选择不显示错误消息。
例如,如果您使用命令行运行程序并且权限不足,则程序将向您显示标准错误而不是标准输出。

现在,说到如何处理这些错误消息,有很多方法。
最简单的是重定向。
您可以将错误信息导出到文件或直接转储到“黑洞”中,这样​​就不会影响您的正常操作。

例如,如果要将错误信息导出到文件中,可以键入:command 2 > error.log。
这样,错误信息就被写入到error.log文件中。
如果您希望先刷新文件然后再写入文件,只需使用 > 就可以了。
如果要添加内容,请使用 >>。

有时候,如果你不想看到这些错误信息,你可以使用 2 > /dev/null 将其屏蔽掉,这样你就不知道程序是否出错了。

此外,有时程序会同时生成错误消息和正常消息。
你不希望它们混合在一起。
你应该做什么?这就需要合并生产。
以前的方法是先将标准输出重定向,然后将标准错误重定向到同一位置,如下所示:command > output.log 2 >&1 但是,从 Bash 4 开始,语法已经简化,您可以直接使用 &>。

标准误差和标准差是独立的。
即使重定向标准输出,标准错误仍然可以独立输出。
例如,如果使用命令 ls /nonexistent > file.txt,file.txt 将成为空文件,因为该目录不存在,但屏幕上仍会出现错误消息“Nosuchfileordirectory”,除非您另外使用重定向 2 >。

对于应用场景来说,标准错误重定向在日志管理、调试或静默执行中特别有用。
例如,隐藏自动化脚本中的一些琐碎错误或单独存储错误日志以便于分析。
但是,通过了解标准错误机制,您可以更好地控制程序输出的行为。
我仍然想知道,你能将这些知识运用到实际实践中吗?无论如何,这取决于你。

Linux文件系统故障,Input/output error

是的,这就是问题所在。
输入输出错误,文件系统损坏。

首先应该检查什么类型:df-T 或 blkid 来查看文件系统。

文件系统已关闭? umount 卸载它。
不? 重新启动或fuser 终止该进程。

使用xfs_repair修复,先卸载再修复。
是不是日志有问题? 首先挂载并重播,如果没有,则强制清除。

修复后重新安装试试是否可以。
其他文件系统? 使用fsck修复。

预防? 备份、监控磁盘、更新系统。

亲自看看,这些步骤可以帮助您解决问题。