赞
踩
对于一般的应用来说(Apache、系统进程)1024一般完全足够使用。但是如何象mysql、java等单进程处理大量请求的应用来说就有 点捉襟见肘了。
如果系统并发特别大,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。
lsof -p 进程id |wc -l //文件数量
ls /proc/进程id/fd |wc -l //文件描述符数量
查询当前终端的文件句柄数: ulimit -n
回车,一般的系统默认的1024.
修改思路:
你登录的用户是什么身份,是不是root用户,由于服务器的root用户权限很大,一般是不能用来登录的,都是通过自己本人的登录权限进行登录,并通过sudo方式切换到root用户下进行工作。 用户登录的时候执行sh脚本的顺序:
/etc/profile.d/file
/etc/profile
/etc/bashrc
/mingjie/.bashrc
/mingjie/.bash_profile
由于ulimit -n的脚本命令加载在第二部分,用户登录时由于权限原因在第二步还不能完成ulimit的修改,所以ulimit的值还是系统默认的1024。
修改linux的软硬件限制文件/etc/security/limits.conf.
在文件尾部添加如下代码:
sudo tee -a /etc/security/limits.conf << EOF
#
* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800
EOF
ulimit -n 204800
命令如下:
cat /proc/sys/fs/file-max
#系统
echo 'fs.file-max = 65535' | sudo tee -a /etc/sysctl.conf
#用户
echo 'fs.file-max = 65535' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# Systemd
sudo sed -i '/DefaultLimitNOFILE/c DefaultLimitNOFILE=65535' /etc/systemd/*.conf
sudo systemctl daemon-reexec
验证需要重新登录或者打开新的终端:
# 查看系统限制
cat /proc/sys/fs/file-max
# 查看用户硬限制
ulimit -Hn
# 查看用户软限制
ulimit -Sn
# 查看某进程的限制
cat /proc/PID/limits # 将 PID 替换为具体的进程 ID
# 查看其他用户限制
su - www -c 'ulimit -aHS' -s '/bin/bash'
操作系统版本为 CentOS Linux release 7.2.
[root@centos7 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
ulimit -n查看大小,默认是1024
临时设置下只在此终端下有效
ulimit -n 204800
永久生效的方法:
修改 vi /etc/security/limits.conf
文件
* soft nofile 204800
* hard nofile 204800
* soft nproc 204800
* hard nproc 204800
* # 代表针对所有用户
noproc #是代表最大进程数
nofile #是代表最大文件打开数
然后重启服务器或重新登录即可生效。
进行测试
ulimit -n
使用ulimit -a 或者 ulimit -n。
是linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量)
这里只是对用户级别的限制,其实还有个是对系统的总限制
# cat /proc/sys/fs/file-max
man proc,可得到file-max的描述:
即file-max是设置系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。
也就是说,这项参数是系统级别的。
假如,我们设置进程打开的文件句柄数是1024 ,但是系统总线制才500,所以所有进程最多能打开文件句柄数量500。从这里我们可以看出只设置进程的打开文件句柄的数量是不行的。所以需要修改系统的总限制才可以。
echo 6553560 > /proc/sys/fs/file-max
上面是临时生效方法,重启机器后会失效;
永久生效方法:
修改 /etc/sysctl.conf, 加入
fs.file-max = 6553560
查看效果
sysctl -p
cat /proc/sys/fs/file-max
问题背景:
su - xxx 发现报错:
su: /bin/bash: Too many open files in system
解决方法:
[root@tmp ~]# cat /proc/sys/fs/file-max
65536
[root@tmp ~]# vi /etc/sysctl.conf
修改fs.file-max = 6553600
[root@tmp~]# sysctl -p
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.sem = 1055 32000 100 128
kernel.shmmax = 2147483648
kernel.shmall = 2097152
net.core.optmem_max = 65535
net.core.rmem_default = 4194304
net.core.wmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_max = 262144
fs.file-max = 6553600
[root@tmp~]# cat /proc/sys/fs/file-max
6553600
亲测可用!
https://support.huaweicloud.com/intl/zh-cn/trouble-ecs/ecs_trouble_0354.html
问题现象
修改/etc/security/limits.conf文件,重启后配置项不生效。
可能原因
Linux操作系统云服务器中限制资源使用的配置文件是/etc/security/limits.conf和/etc/security/limits.d/目录,/etc/security/limits.d/目录中的配置优先级高于/etc/security/limits.conf的配置。
如果修改/etc/security/limits.conf文件,重启后不生效,则可能是由于limits.conf中的修改被/etc/security/limits.d/目录中配置项的值所覆盖。
解决方案
修改/etc/security/limits.d/目录中配置项或修改/etc/security/limits.conf文件。
说明:
如果修改了/etc/security/limits.conf 文件没有生效,请检查/etc/security/limits.d/目录中配置项的值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。