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 -p

3.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-max 

4.句柄数限制

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.target

4.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 -p

5.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) unlimited

5.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之进程数和句柄数相关推荐

  1. linux查看进程打开的句柄数,【转】Linux下查看进程打开的文件句柄数

    .Net Html如何上传图片到一般应用程序 用html实现图片上传 后台采用.net其中在这里要借用一个js插件 在这里我会写一个图片上传的一个小Demo,有不全的地方多多包容,和提议, 我把已经写 ...

  2. linux进程数和句柄数

    注:linux版本CentOS7 目录 一.进程和句柄概念 二.Linux资源限制 1. 用户资源限制 2.service 资源限制 3. 系统资源限制 三. 进程数限制 1. 用户进程数限制 2. ...

  3. 查看进程占用的句柄数

    1.每个进程所能占用的句柄数是有上限的,如果程序打开文件.socket等,但是不关闭,并且频繁的做这样的操作,那么可能导致进程占用的句柄数超过显示,程序会异常崩溃,或产生打不开文件.socket的操作 ...

  4. Linux记录-进程数和句柄数调整

    1.cat /etc/security/limits.conf webuser soft nofile 65535 webuser hard nofile 65535 webuser soft npr ...

  5. linux 查看文件句柄,查看linux下进程打开的文件句柄数并清理

    ---查看系统默认的最大文件句柄数,系统默认是1024 # ulimit -n 1024 ----查看当前进程打开了多少句柄数 # lsof -n|awk '{print $2}'|sort|uniq ...

  6. VC获取进程的cpu使用率、内存、线程数、句柄数等信息

    //ProcessInfoCollect.h //进程信息采集#pragma once//枚举进程 typedef BOOL(_stdcall *ENUMPROCESS)(DWORD *pProces ...

  7. linux修改文件句柄数生效_linux修改句柄数

    linux服务器大并发调优时,往往需要预先调优linux参数,其中修改linux最大文件句柄数是最常修改的参数之一. 在linux中执行ulimit -a 即可查询linux相关的参数,如下所示: [ ...

  8. linux系统句柄数命令

    查看当前系统支持打开的最大句柄数 Linux的/proc/sys/fs/file-max决定了当前内核可以打开的最大的文件句柄数. cat /proc/sys/fs/file-max 修改系统最大打开 ...

  9. Linux查看句柄数

    源文地址:   Linux查看句柄数_努力者Mr李的博客-CSDN博客_linux查看句柄数注: 部分概念介绍来源于网络当你的服务器在大并发达到极限时,就会报出"too many open ...

最新文章

  1. java国际化程序创建属性文件,Java程序国际化学习代码一
  2. 相同update语句在MySQL,Oracle的不同表现(r12笔记第30天)
  3. #周分享#骨架屏[Skeleton Screen]
  4. jquery 过滤html代码,jquery – 如何使指令使用过滤的HTML属性?
  5. 第五十五期:区块链将在2020年实现的重大改变
  6. linux查看进程ppid,pidof命令从运行的进程中以名称查找出进程号PID/PPID横向大到小展示...
  7. linux系统下定时备份,在Linux系统中简单地实现定时备份的方法 -电脑资料
  8. C++重要知识点小结---3
  9. [Reinforcement Learning] Value Function Approximation
  10. 拓端tecdat|R语言结合新冠疫情COVID-19对股票价格预测:ARIMA,KNN和神经网络时间序列分析
  11. IDEA导入本地项目
  12. android webview 获取cookie,Android WebView 之Cookie
  13. ae合成设置快捷键_AE设计首选快捷键大全+解析
  14. MySQL时区问题(与北京时间相差13小时)-- mybatisplus使用LocalDateTime.now()获取系统当前时间问题
  15. (网络安全数据集一)美国国家安全漏洞库 NVD-CVE信息解读 和常用漏洞库
  16. Excel饼图中既显示百分比
  17. 怎么判断自己的牙齿是否需要做矫治
  18. Zxing图片识别 从相册选二维码图片解析总结
  19. AI热潮来袭||网友:AI会不会抢自己的饭碗啊~~~
  20. easywechat Api大全

热门文章

  1. 如何保障企业网络安全
  2. C语言——甲说乙在说谎
  3. 网易云音乐评论抓取及生成词云
  4. Unity 常用脚本:Vector2
  5. Vmware安装智能家居系统HomeAssistant
  6. 免费疫情相关的接口(亲测有效的哟)
  7. 电信、网通、联通等恶意DNS劫持跳广告页面的解决方法
  8. 打造 Compose 版本的 Banner
  9. 各种颜色发光二极管的工作电压
  10. 分布式商城项目数据库设计