Linux 句柄
查看当前系统中句柄数量
/proc/sys/fs/file-nr
文件返回的三个数字分别代表以下含义:
- 当前打开的文件句柄数 :这个数字表示当前系统中已经打开的文件句柄的数量。文件句柄是系统用于标识打开文件的一个引用。
- 分配的文件句柄总数 :这个数字表示系统已经分配的文件句柄的总数。不是所有的分配都会被使用,因此这个数字可能高于第一个数字。
- 系统允许的最大文件句柄数 :这个数字是系统配置的最大文件句柄数。这是系统级别的限制,意味着系统上的所有进程共享这个限制。当系统中的文件句柄数量达到这个数时,将无法打开更多的文件。
例如,如果 /proc/sys/fs/file-nr
文件显示 1024 4096 32768
,这意味着当前有 1024 个文件句柄正在使用中,系统已经分配了 4096 个文件句柄,而系统配置的最大文件句柄数为 32768。
这些数字对于系统管理员来说非常重要,因为如果系统达到文件句柄的限制,可能会导致文件打开失败,影响系统稳定性和应用程序的正常运行。如果发现正在使用的文件句柄数量接近最大限制,管理员可能需要增加最大文件句柄数或优化应用程序以减少文件句柄的使用。
设置系统最大句柄数量
通过 /proc/sys/fs/file-max
文件设置, 这个文件控制着系统级别的最大文件句柄数。可以查看当前的限制并根据需要设置一个新值。
- 查看当前的最大文件句柄数:
bashCopy code cat /proc/sys/fs/file-max
- 临时设置最大文件句柄数(在下次重启后失效):
bashCopy code echo [number] > /proc/sys/fs/file-max
- 永久设置最大文件句柄数,需要编辑
/etc/sysctl.conf
文件,添加或修改以下行:
bashCopy code fs.file-max = [number]
然后运行
sysctl -p
来使改动生效。
句柄的意义
在 CentOS 这样的 Linux 系统中,句柄是一个非常重要的概念。句柄(Handle)是一个抽象的概念,用于在软件中代表和管理对各种资源的访问。这些资源可以包括文件、网络连接、进程、线程、数据库连接等。句柄的主要用途和意义包括:
1.资源引用 :句柄充当资源的引用或标识符。例如,当一个程序打开一个文件时,操作系统提供一个文件句柄,程序通过这个句柄来进行后续的读写操作。
2.抽象化资源操作 :句柄提供了一种抽象的方式来操作资源。程序员不需要知道资源的具体物理细节(如内存地址),而是通过句柄来操作。
3.安全性和稳定性 :通过句柄,操作系统可以控制对资源的访问,防止未授权的访问和潜在的冲突,增加系统的安全性和稳定性。
4.资源管理 :操作系统通过句柄来跟踪资源的使用情况,这有助于资源的分配和回收,防止资源泄露。
5.跨进程通信 :在某些情况下,句柄还可以用于跨进程通信,如管道、信号量等。
在 CentOS 系统中,句柄的概念是非常核心的,因为它们为操作系统和应用程序提供了一种有效和安全的方式来管理和操作各种系统资源。理解句柄的工作原理对于进行系统编程和资源管理非常重要。
在 Linux 和类 Unix 系统中(如 CentOS),即使文件被删除了,只要有进程仍然持有该文件的句柄并打开着该文件,文件所占用的空间就不会被释放。
这是因为文件系统是基于引用计数的。当一个文件被打开时,系统会为该文件增加一个引用计数。即使该文件被从文件系统中删除(例如,通过 rm
命令),只要有进程持有该文件的句柄,文件的内容就不会从磁盘上删除,因为它的引用计数不为零。只有当所有持有该文件句柄的进程都关闭了对它的引用后,文件的内容才会被最终删除,空间也随之释放。
在您的例子中,如果一个进程打开了一个日志文件,并且在文件被删除后仍然保持打开状态,该文件的数据仍然会占用磁盘空间。这种情况在处理日志文件时尤为常见,因为日志文件通常被长时间地持续写入。
要解决这个问题,您可以:
重启相关进程 :这是最简单的解决方案。重启持有该文件句柄的进程会导致其关闭所有打开的文件句柄,从而允许系统释放文件占用的空间。
查看系统中已经删除的文件占用大小
[root@VM-0-16-centos ~]# echo "COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME 占用大小" ;lsof | awk '/deleted/{print $0,$9/1024/1024/1024"GB"}' | sort -k9nr
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME 占用大小
sh 11523 11524 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 11525 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 11526 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 11527 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 11528 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 11529 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 11530 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 11531 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 27785 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
sh 11523 30844 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0.000457785GB
netserver 5170 root 1w REG 253,1 0 491598 /tmp/netserver.debug_5170 (deleted) 0GB
netserver 5170 root 2w REG 253,1 0 491598 /tmp/netserver.debug_5170 (deleted) 0GB
netserver 5170 root 4w REG 253,1 0 491598 /tmp/netserver.debug_5170 (deleted) 0GB
popup 21301 root 1u CHR 136,0 0t0 3 /dev/pts/0 (deleted) 0GB
popup 21301 root 2u CHR 136,0 0t0 3 /dev/pts/0 (deleted) 0GB
sh 11523 root 7u REG 253,1 102 491543 /tmp/yddaemon.log (deleted) 0GB
syslog-ng 310 root 7u REG 253,1 16384 33121 /var/lib/syslog-ng/syslog-ng.persist- (deleted) 0GB
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 分析 vmcore
下一篇: Linux 内核参数
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论