Linux之进程数和句柄数
生活随笔
收集整理的這篇文章主要介紹了
Linux之进程数和句柄数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Linux之進程數和句柄數
1.背景
由于業務的需要,我們在阿里云上面申請了30多臺主機,安裝的是centos7.2.1511系統。一般情況下,我們需要對文件句柄數、進程數等做一些標準化的配置。2.進程和句柄的概念
一個程序可能打開多個進程,一個進程在運行中會打開很多資源,如文件file、通訊連接socket、正在監聽的端口等,我們都統稱為句柄(handle)。linux任何東西都是文件,所以當一個進程打開的句柄數超過系統限制時,會提示too many open files。3.進程數限制
資源限制的配置可以在/etc/security/limits.conf或/etc/security/limits.d/ 下的子配置文件中配置,系統是先加載limits.conf然后按照英文字母順序加載limits.d目錄下的配置文件,后加載配置覆蓋之前的配置。3.1 用戶資源限制
2.1 修改root用戶max user process vim /etc/security/limits.conf root soft nproc 10000 root hard nproc 100002.2 修改普通用戶max user process 方法1: vim /etc/security/limits.conf tomcat soft nproc 10000 tomcat hard nproc 10000 方法2: vim /etc/security/limits.d/20-nproc.conf * soft nproc 4096 root soft nproc unlimited tomcat soft nproc 10000 tomcat hard nproc 10000說明: 1.soft為warning值,hard為最大值,*代表匹配所有用戶。 2.在limits.conf里配置針對所有用戶(*)的max user process的不生效,只能在20-nproc.conf里配置。 3.如果單獨對某一用戶,如tomcat這種,可以在limits.conf配置文件里單獨配置,也可以在20-nproc.conf里配置。 4.如果20-nproc.conf和limits.conf同時配置了如tomcat用戶的max user process,系統以20-nproc.conf里的配置值為標準。3.2 service資源限制
對于那些不是通過PAM認證登錄的用戶,如mysql、nginx等,上述配置是不生效的;因為在CentOS 7/RHEL 7的系統中,使用Systemd替代了之前的SysV,因此/etc/security/limits.conf文件的配置作用域縮小了一些,limits.conf這里的配置,只適用于通過PAM認證登錄用戶的資源限制,它對systemd的service的資源限制不生效。需要通過文件/etc/systemd/system.conf和/etc/systemd/user.conf配置, 同樣,也會加載兩個對應的目錄中的所有.conf文件 /etc/systemd/system.conf.d/*.conf 和 /etc/systemd/user.conf.d/*.conf。其中,system.conf是系統實例使用的,user.conf用戶實例使用的。一般的sevice,使用system.conf中的配置即可。system.conf.d/*.conf中配置會覆蓋system.conf。示例1:docker容器的進程數限制
vim /etc/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target[Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNPROC=16665 #修改容器的進程數限制,只能在docker服務的docker.service文件里修改 TimeoutStartSec=16665 #修改容器的句柄數限制,只能在docker服務的docker.service文件里修改 TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s[Install] WantedBy=multi-user.target注明:查看某個服務的資源限制 (cat /proc/pid/limits)。
3.3 系統資源限制
每個用戶設置了其能打開的最大進程數,但這樣并不能控制系統總的進程數(kernel.pid_max),假設kernel.pid_max=1000,用戶的max user processes,值無論設置多大,最多能打開的進程數依然為1000。
查看全局的pid_max方法: 方法1: cat /proc/sys/kernel/pid_max 方法2: cat /etc/sysctl.conf kernel.pid_max = 32768修改全局pid_max方法 臨時修改:echo 65535 > /proc/sys/kernel/pid_max 永久修改:echo "kernel.pid_max = 65535" >> /etc/sysctl.conf && sysctl -p3.4 查看進程數
1.查看系統下所有進程 ps -eFH | wc -l ps aux | wc -l2.查看系統當前所有線程 ps -eLf | wc -l3.查看一個進程下有多少個線程 pstack pid top -H -p pid ps hH p pid | wc -l cat /proc/pid/status | grep Threads4.查看系統當前允許最大線程數 cat /proc/sys/kernel/threads-max4.句柄數限制
4.1 用戶句柄數限制
登錄用戶的限制,可通過/etc/security/limits.conf或 /etc/security/limits.d/下的子配置文件來配置。
修改root用戶的句柄數限制 vim /etc/security/limits.conf #該文件只影響通過PAM登錄的用戶,不影響系統服務的資源限制 root soft nofile 65535 root hard nofile 65535修改tomcat用戶句柄數限制 方法1: vim /etc/security/limits.conf tomcat soft nofile 65535 tomcat hard nofile 65535 方法2: vim /etc/security/limits.d/20-nproc.conf tomcat hard nofile 99999 tomcat soft nofile 99999注明:如果需要單獨對某一用戶的文件句柄數進行限制,如tomcat,則如上述方法,如果對所有用戶的文件句柄數進行限制,則為 * hard nofile 99999和* soft nofile 99999。4.2 service句柄數限制
示例1:docker容器的進程數限制vim /etc/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target[Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=16665 #修改容器的進程數限制,只能在docker服務的docker.service文件里修改 TimeoutStartSec=16665 #修改容器的句柄數限制,只能在docker服務的docker.service文件里修改 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s[Install] WantedBy=multi-user.target4.3 系統句柄數限制
查看系統允許最大句柄數 cat /proc/sys/fs/file-max查看系統當前使用的總句柄數 cat /proc/sys/fs/file-nr 1408 0 95852 #1408為使用數,95852為總數臨時修改 echo 6553560 > /proc/sys/fs/file-max永久修改 echo "fs.file-max=655350" >> /etc/sysctl.conf && sysctl -p5.ulimit命令
[root@docker ~]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 7284 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 99998 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 10000 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited5.1 命令參數
命令參數 -H 設置硬資源限制,一旦設置不能增加。 -S 設置軟資源限制,設置后可以增加,但是不能超過硬資源設置。 -a 顯示當前所有的 limit 信息。 -c 最大的 core 文件的大小, 以 blocks 為單位。 -d 進程最大的數據段的大小,以 Kbytes 為單位。 -f 進程可以創建文件的最大值,以 blocks 為單位。 -l 最大可加鎖內存大小,以 Kbytes 為單位。 -m 最大內存大小,以 Kbytes 為單位。 -n Linux操作系統對一個進程可以打開最大文件描述符的數量。 -p 管道緩沖區的大小,以 Kbytes 為單位。 -s 線程棧大小,以 Kbytes 為單位。 -t 最大的 CPU 占用時間,以秒為單位。 -u 用戶最大可用的進程數。 -v 進程最大可用的虛擬內存,以 Kbytes 為單位。resource: core - 限制內核文件的大小 date - 最大數據大小 fsize - 最大文件大小 memlock - 最大鎖定內存地址空間 nofile - 打開文件的最大數目 rss - 最大持久設置大小 stack - 最大棧大小 cpu - 以分鐘為單位的最多 CPU 時間 noproc - 進程的最大數目 as - 地址空間限制 maxlogins - 此用戶允許登錄的最大數目5.2 查看句柄數
查看系統用戶所有限制值:ulimit -a 設置用戶open files(用戶可以打開文件的最大數目):ulimit -n 4096。執行該命令非root用戶只能設置到4096。想要設置到8192需要sudo權限或者root用戶。 查看當前系統打開的文件數量: lsof | wc -l ? 查看當前進程的打開文件數量:lsof -p pid | wc -l? ? ? (lsof -p 1234 | wc -l? ) 查看當前進程的最大可以打開的文件數:cat /proc/PID/limits? (如果通過ulimit -n 設置或者修改/etc/security/limits.conf,看看進程是否生效)?? 查看系統總限制打開文件的最大數量:cat /proc/sys/fs/file-max注明:lsof只能以root權限執行。在終端下輸入lsof即可顯示系統打開的文件,因為 lsof 需要訪問核心內存和各種文件,所以必須以 root 用戶的身份運行它才能夠充分地發揮其功能。
總結
以上是生活随笔為你收集整理的Linux之进程数和句柄数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018互联网女皇报告发布:中国正成为全
- 下一篇: mac 修改java版本_Mac如何更改