Centos排除too many open files的问题
简介最近在使用Centrifugo的项目的时候,当连接数比较多的是时候,出现了“too many open files”的错误。本文主要记录如何排除和优化该问题。
当出现“too many open files”错误的时候,我们应该先从两个方面进行查找问题;
1、查看系统文件限制
cat /etc/sysctl.conf
查看如下配置是否合理:
fs.file-max = 1000000
2、查看用户级的文件限制
cat /etc/security/limits.conf
查看如下配置是否合理:
* soft nofile 655350 * hard nofile 655350
如果上述两个配置都没有问题,并且比较合理,那么我们还需要查看下进程自身能打开多大的文件数
3、单独获取程序文件数限制
[root@online log]# cat /proc/31804/limits #31804就是进程ID Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 31215 31215 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 31215 31215 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
从中可以看出,Max open files的文件数为1024,这是为什么呢?然后对系统启动该进程的方式找到了问题,这个进程通过supervisor启动的,所以是否跟supervisor有关呢?然后查看了/etc/supervisord.conf配置文件,里面确实有如下的配置:
minfds=1024 ; min. avail startup file descriptors; default 1024 minprocs=200 ; min. avail process descriptors;default 200
那么我们将这两个配置改成合理的数值。这里我们都修改成了100000;修改完后需要重启supervisor,但是通过如下命令配置文件是不会生效的:
supervisorctl reload
所以我们需要通过如下两条命令来重启supervisor:
supervisorctl shutdown #先停止 supervisord -c /etc/supervisord.conf; #再启动
下面我们再来看下启动的进程的信息:
[root@online log]# cat /proc/6261/limits #这里对应的进程ID已经发生了变化 Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 1000000 1000000 processes Max open files 1000000 1000000 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 31215 31215 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
从上面显示的内容可以看出,Max open files已经修改成功了。
4、统计系统进程打开文件数,并进行从多到少排序
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
Golang如果直接使用Alpine基础镜像进行打包,在运行的时候会出现如下问题:standard_init_linux.go:211: exec user process caused "no such file or directory"
nodejs中使用npm和yarn,使用最新阿里云镜像 aliyun mirror,网上很多还是文章用的是下面这个地址~~yarn config set registry https://registry.npm.taobao.org~~
并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并与查询两种操作的一种数据结构。
Mysql是经常使用的关系型数据库,那么使用之前需要先会安装。Mysql的安装方式有几种,本文我们主要记录下如何使用cmake进行编译安装。
默认情况下 pip 使用的是国外的镜像,在下载的时候速度非常慢,本文我们介绍使用国内源对pip进行加速。
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。