热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux之进程数和句柄数:linux句柄数含义

本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投

本文主要介绍关于linux文件描述符设置,centos7设置文件句柄数,centos7查看进程数的知识点,对【Linux之进程数和句柄数】和【linux句柄数含义】有兴趣的朋友可以看下由【东城绝神】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【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     10000

2.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 -l

2.查看系统当前所有线程
ps -eLf | wc -l

3.查看一个进程下有多少个线程
pstack pid
top -H -p pid
ps hH p pid | wc -l
cat /proc/pid/status | grep Threads

4.查看系统当前允许最大线程数
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之进程数和句柄数》版权归东城绝神所有,引用Linux之进程数和句柄数需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了在Linux系统中设置文件ACL权限的方法和使用说明,包括在centos7.3和centos6.9中开启ACL权限的两种方法:在挂载时指定打开ACL权限和修改默认的属性信息。同时提供了对ACL权限的详细解释和应用场景。 ... [详细]
author-avatar
丁军东建宏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有