Linux 句柄

发布于 2025-02-21 22:20:41 字数 5035 浏览 6 评论 0

查看当前系统中句柄数量

/proc/sys/fs/file-nr 文件返回的三个数字分别代表以下含义:

  1. 当前打开的文件句柄数 :这个数字表示当前系统中已经打开的文件句柄的数量。文件句柄是系统用于标识打开文件的一个引用。
  2. 分配的文件句柄总数 :这个数字表示系统已经分配的文件句柄的总数。不是所有的分配都会被使用,因此这个数字可能高于第一个数字。
  3. 系统允许的最大文件句柄数 :这个数字是系统配置的最大文件句柄数。这是系统级别的限制,意味着系统上的所有进程共享这个限制。当系统中的文件句柄数量达到这个数时,将无法打开更多的文件。

例如,如果 /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 技术交流群。

扫码二维码加入Web技术交流群

上一篇:

下一篇:

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

别再吹冷风

暂无简介

文章
评论
383 人气
更多

推荐作者

闻呓

文章 0 评论 0

深府石板幽径

文章 0 评论 0

mabiao

文章 0 评论 0

枕花眠

文章 0 评论 0

qq_CrTt6n

文章 0 评论 0

红颜悴

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文