Linux—文件句柄调优

文件系统句柄的上限为/proc/sys/fs/file-max。
用户文件处理 /etc/security/limits.conf 中的软限制和硬限制。
进程文件句柄的上限为/proc/sys/fs/nr_open。
使用 ulimit -n 进行时间修改。
继续修改配置文件,添加sysctl -p。
使用 lsof 和 cat /proc/sys/fs/file-nr 监控。
根据需要,不要随意更改。
重新启动验证服务。

Linux中的文件句柄数与限制

哎哟,朋友,你问这个案子,我可是有一个血泪的故事啊!记得那年我在做我们公司服务器的时候,我还是个初学者。
那天,我突然接到电话,说服务器不能正常工作。
我赶紧看了一下,发现系统文件描述符的数量快要达到上限了,这让我出了一身冷汗。
就在那时我意识到文件描述符看似简单,但实际上它们与系统的核心一样重要。

当时我的服务器是Linux系统。
您不知道文件描述符的数量是有限制的。
如果超过了,就会出事。
我记得当时有 5 ,000 个文件描述符。
因此,我们公司制定了一个宏伟的计划。
进程打开的文件描述符数量突然超过限制,系统瘫痪。
很尴尬。
后来查资料发现Linux系统对文件描述符有三个级别的限制:系统级、用户级和进程级。
这确实是知识的财富。

当时我还不懂lsof这个工具。
后来我用了,发现太好用了,哭了。
例如,可以使用 lsof -p[pid] 查找某个进程打开的所有文件描述符,还可以使用 lsof-path/filename 命令查看哪个进程打开了哪个文件。
真的很实用。
现在回想起来,我当时真是傻了。
我不懂这些工具,只能担心万一出问题了。

回想起来,文件描述符处理起来确实很头疼,但是学会了这些技术之后,它们就不再那么可怕了。
小伙伴们,以后如果遇到这样的问题,可别像我一样傻了。
详细了解这些工具和技术,这样您就不必着急。
呵呵,别说了,你还有什么问题吗?

查看已使用的句柄数

昨晚我正在写一些代码,我的电脑突然死机了,屏幕一片模糊。
当我打开任务管理器时,我发现进程描述符的数量增加到了数万个。
那一刻,我感觉有些不对劲。
这让我想起了如何检查句柄的数量。
这实际上取决于系统。

对于Windows,旧的方法是Ctrl+Shift+Esc打开任务管理器,进入详细信息页面,找到进程名称,旁边有一个句柄号。
如果您想详细调查,您应该使用 Sysinternals 的 ProcessExplorer。
该工具可以显示更详细的信息。
我记得有一次使用这个工具时,我震惊地发现一个拥有数万个描述符的进程实际上是一个病毒。

Linux系统不同。
我经常使用cat /proc/sys/fs/file-nr。
该命令直接显示系统句柄总数。
比如我前阵子查的时候,结果是3 0000 4 0000 5 0000,第一个是分配的句柄数,第二个是打开的文件数,第三个是最大句柄数。
如果你想了解一个进程,你必须首先使用 ps -ef 来查找 PID。
例如,如果您看到 PID 为 1 2 3 4 ,请使用 lsof -p 1 2 3 4 | wc -l 找出进程打开了多少个句柄。
我尝试过一次,发现某个服务进程的句柄数量超过了2 000个,当时我就想为什么会有这么多。

在Python中编写脚本时,使用psutil库来检查句柄的数量会更方便。
一行代码 print(psutil.Process().num_handles()) 将产生结果。
上次写了一个爬虫脚本,跑了一晚上。
我查看了手柄的数量,发现已经增加到了几千个。
那一刻我知道记忆正在消失。

等等,还有一件事。
检查句柄数不仅仅是看数字,还要根据具体情况进行判断。
例如,对于正常运行的浏览器,描述符的数量通常从几百到一千不等。
如果突然达到几万,很可能就出问题了。
我记得有一次使用 Chrome 时,一个标签页有几十个打开的句柄。
这是正常的吗?这取决于具体情况。

最后我想知道为什么系统会限制句柄数量?如果没有限制的话,当达到数百万个句柄时进程会崩溃吗?实在是不清楚。