linux RssFile什么含义,linux 文件描述符

文件描述符是什么?和文件句柄有啥區別?

文件描述符是linux/unix操作系統中特有的概念。相當於windows系統中的文件句柄。一個意思不同叫法。

Linux系統中, 每當進程打開一個文件時,系統就為其分配一個唯一的整型文件描述符,用來標識這個文件。標准C中每個進程默認打開的有三個文件,標准輸入,標准輸出,標准錯誤,分別用一個FILE結構的指針來表示,即stdin,stout,sterr,這三個結構分別對應着三個文件描述符0,1,2。

文件描述符是一個簡單的整數,用以標明每一個被進程所打開的文件和socket。第一個打開的文件是0,第二個是1,依此類推。linux 操作系統通常對每個進程l能打開的文件數量有一個限制。

linux系統對文件描述符的限制有兩個級別

系統級別,使用cat /proc/sys/fs/file-max查看,默認值是根據內存大小,系統自動設置的,一般為內存大小(KB)的10%,shell下可以這樣計算grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'(可能有各種其他原因導致file-max沒有設置為內存的10%)

進程級別(也叫用戶級別),默認是1024,使用ulimit -n查看

為什么要限制打開的文件描述符?

原因1 – 資源問題:每個打開的文件都需要消耗內存來管理,而內存是有限的。

原因2 – 安全問題:如果不限制的話,有不懷好心的人啟動一個進程來無限的創建和打開新的文件,會讓服務器崩潰。

所以限制文件描述符的數量對於linux系統的穩定性是非常重要的。

配置文件

限制資源使用的配置文件是 /etc/security/limits.conf,和/etc/security/limits.d/目錄,/etc/security/limits.d/里面配置會覆蓋/etc/security/limits.conf的配置

可以限制的資源類型如下:

所創建的內核文件的大小、進程數據塊的大小、Shell 進程創建文件的大小、內存鎖住的大小、常駐內存集的大小、打開文件描述符的數量、分配堆棧的最大大小、CPU 時間、單個用戶的最大線程數、Shell 進程所能使用的最大虛擬內存。同時,它支持硬資源和軟資源的限制。

hard和soft的區別: soft是一個警告值,而hard則是一個真正意義的閥值,超過就會報錯,一般情況下都是設為同一個值。

第一列表示用戶和組(@開頭)。第二列表示軟限制還是硬限制,第三列表示限制的資源類型,第四列表示限制的最大值

core是內核文件,nofile是文件描述符,noproc是進程,一般情況下只限制文件描述符數和進程數就夠了

#                

#

#*               soft    core            0

#root            hard    core            100000

#*               hard    rss             10000

#@student        hard    nproc           20

#@faculty        soft    nproc           20

#@faculty        hard    nproc           50

#ftp             hard    nproc           0

#ftp             -       chroot          /ftp

#@student        -       maxlogins       4

# End of file

-----------分割線,上面是配置文件的模板,下面是自己添加的------------------------

*        soft  nofile         655350      #表示任何一個用戶可以打開的最大的文件描述符數量

*        hard    nofile         655350

*        soft    nproc          655350      #表示任何一個用戶可以打開的最大的進程數

*          hard    nproc          655350

@student        hard    nofile          65535       #student組中的任何人最多能打開文件描述符數量是65535,並且會在打開65000個時發出警告

@student        soft    nofile          65000

@student        hard    nproc           50         #student組中的任何人不能擁有超過50個進程,並且會在擁有30個進程時發出警告

@student        soft    nproc           30

1234567891011121314151617181920212223242526272829

系統級別

1、查看

$ cat /proc/sys/fs/file-max

186405

12

2、設置

臨時性

$ echo 1000000 > /proc/sys/fs/file-max

1

永久性

在/etc/sysctl.conf中設置,應該設什么值是最佳實踐?比如8G的內存,設為8192/2 * 256 = 524288

fs.file-max = 1000000

1

進程級別

1、查看,-n默認查看的是soft limit,這個值是從/etc/security/limits.conf文件的* soft nofile 655350來的

$ ulimit -n

170000

12

查看hard limit

$ ulimit -Hn

170000

12

2、設置

臨時性:

通過ulimit -Sn設置最soft limit,注意soft limit必須小於hard limit

$ ulimit -Sn 160000

1

通過ulimit -Hn設置最Hard limit

$ ulimit -Hn 160000

1

同時設置soft limit和hard limit。對於非root用戶只能設置比原來小的hard limit。

ulimit -n 180000

1

永久性:

root權限下,在/etc/security/limits.conf中添加如下兩行,*表示所有用戶,重啟生效

* soft nofile 102400

* hard nofile 104800

123

注意:設置nofile的hard limit還有一點要注意的就是hard limit不能大於/proc/sys/fs/nr_open,假如hard limit大於nr_open,注銷后將無法正常登錄。

查看系統當前打開的文件描述符數量

其中第一個數表示當前系統分配后已使用的文件描述符數,第二個數表示分配后為使用的(內核2.6版本中這個值總是為0,這並不是一個錯誤,它意味着已經分配的文件描述符總會被使用),第三個數等於file-max。

$ sudo cat /proc/sys/fs/file-nr

2176 0 2048000

12

查看某個進程打開的文件描述符數量

$ lsof -p 20262 |wc -l

5

12

根據用戶創建的進程數排序

ps h -Led -o user | sort | uniq -c | sort -n

1 chrony

1 dbus

1 hanli

1 hanli2

1 nginx

2 postfix

4 named

4 puppet

6 polkitd

6 redis

21 mysql

125 root

1234567891011121314

總結

/proc/sys/fs/file-max限制不了/etc/security/limits.conf

只有root用戶才有權限修改/etc/security/limits.conf

對於非root用戶, /etc/security/limits.conf會限制ulimit -n,但是限制不了root用戶

對於非root用戶,ulimit -n只能越設置越小,root用戶則無限制

任何用戶對ulimit -n的修改只在當前環境有效,退出后失效,重新登錄新來后,ulimit -n由limits.conf決定

如果limits.conf沒有做設定,則默認值是1024

當前環境的用戶所有進程能打開的最大問價數量由ulimit -n決定

---------------------

作者:fanren224

來源:CSDN

原文:https://blog.csdn.net/fanren224/article/details/79971359

版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值