在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。
对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有 点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
131 24204
57 24244
57 24231
56 24264
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
ps -aef |grep 24204
mysql 24204 24162 99 16:15 ? 00:24:25 /usr/sbin/mysqld
哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。
但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
ulimit -HSn 4096
以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄 数越多响应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改 /etc/profile 把上面命令加到最后。
⑵ linux 一个进程最多打开多少个文件
1、在linux系统中,理论上一个进程可以打开的文件数可以通过如下命令查找到。在终端执行:ulimit -a命令,找到open files一行即可。
2、这个值只是一个理论值,随着你的系统硬件资源而变化,如果配置低,可能远达不到这个值,如果系统配置很高级,也可以设置增加这个值。
⑶ Linux查看进程打开多少文件描述符命令
1、当linux打开一个文抄件的时候,Linux内核会为每一个进程在/proc/ 建立一个以其pid
为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)。
2、例如/proc/13844/fd/目录(13844为pid)
3、ps -ef|grep java
root 13884 1 0 Aug15 ? 08:51:38 /doyoo/jdk1.8/bin/java
4、ll /proc/13884/fd
⑷ linux默认情况下,一个进程最多能打开多少文件
现在一般能打开64个。
文件描述符的范围是0 ~ O P E N _ M A X 。早期的U N I X版本采用的上限值是1 9 (允许每个进程打开2 0个文件),现在很多系统则将其增加至6 3。
⑸ 怎样查看linux进程打开的文件数
Linux文件数打开数复
查看当前系统最大的制文件打开数,
在linux终端中输入ulimit -a
“open files”参数选项后面的数值就是当前系统支持的最大打开文件数
修改linux最大文件打开数
如果要修改linux最大文件打开数,可以通过参数命令 unlimit -n 后面接需要设置的文件数量。
设置好之后,再次查看 unlimit -a 你会发现已经设置为新的数量了
设置好之后,再次编辑修改重启设置的服务,已经没有刚刚那个1024文件数限制的报错提示
其他修改方法
除此之外,如果针对不同的用户。也可以通过编辑修改 /etc/rc.local文件设置环境变量,添加 unlimit -n
,重启之后一般就自动设置好了
查看系统句柄文件数
当前系统文件句柄的最大数目,只用于查看,不能设置修改
cat /proc/sys/fs/file-max
查看进程打开文件数
如果需要查看所有进程的文件打开数,命令lsof |wc -l
⑹ linux 系统统计进程打开文件数方法
1 打开文件数各参数含义
参考 https://blog.csdn.net/xifeijian/article/details/9088137
查看某进程打开文件数
need-to-insert-img
2 统计文件所有进程文件数
lsof | awk '{print $2,$1}' | sort | uniq -c | sort -rn >> b.txt
need-to-insert-img
3 统计pid 进程打开的文件数
lsof -p pid
need-to-insert-img
4 统计pid 进程打开所有的文件数
lsof | awk "{print $NF}" | grep 10555 > proct.txt
need-to-insert-img
5 分析pid 进程打开文件数连接 排序 和 统计
awk '{print $NF}' proct.txt |sort |uniq -c |sort -nr > sort2.txt
need-to-insert-img
⑺ linux默认情况下,一个进程最多能打开多少文件
linux
系统中单个进程的最大线程数有其最大的限制
pthread_threads_max
这个限制可以在
/usr/include/bits/local_lim.h
中查看
对
linuxthreads
这个值一般专是
1024,对于
nptl
则没有属硬性的限制,仅仅受限于系统的资源
1024,是系统默认的能打开fd的最大值
修改的话需要重新编译内核
⑻ Linux的too many open files解析
Linux中如果一个进程打开文件或者socket连接过多,有没有及时处理和关闭掉文件或连接,当该进程打开文件的数量超过open files的数量时候,就会报too many open files的错误
Linux 的open files 是在一个同一个进程里限制的,当然也有全局的限制(查看/proc/sys/fs/file-max文件),ulimit -a pid命令可以看到open files进程级别限制的大小。
如果当前open files配置的是1024,则这个进程最多只能打开1024个文件,/proc/PID/fd 目录下的打开文件描述符的数量不会超过1024, 使用 lsof -p PId | wc -l 来查看进程打开的文件数, 超过1024则报too many open files的错误,这时候其他进程仍然可以打开文件,进程之间互不影响。
可以临时通过 ulimit -n 4096 这样设置 open files为4096,然后在同一个用户session下重新启动程序。这样的设置只能在Session级别生效,如果切换用户或者切换shell session就失效了。如果要永久生效,需要修改/etc/security/limits.conf文件,在文件末尾添加下列参数并重启机器:
noproc 是代表最大进程数
Golang等动态GC的语言,会通过GC来回收没有正确关闭的文件(比如使用完文件后没有调用Close()去关闭释放资源),这样就导致一些已经打开的文件又被GC关闭掉,然后此进程又可以打开另外的文件,从而会使/proc/PID/fd目录下文件描述符会指向不同的文件,可能链接到不同的文件。
通过设置GOGC=off环境变量关闭GO GC, 再执行go程序,此问题解决, /proc/PID/fd目录下的文件描述符一直保持在max open files 数量 1024,同时lsof -p pid|grep REG|wc -l 为1024.
打开文件后一定要记得f.Close()关闭,这样就能避免产生too many open files的报错。
⑼ 怎样查看linux进程打开的文件数
linux系统下查看进程打开文件在/proc下,对应每个进程有一个以进程号命名的目录,该目录下有一个fd目录,该目录下面的每个文件是一个符号连接,其文件名对应该进程占用的一个文件描述符,而连接指向的内容表示文件描述符对应的实际文件,有多少个文件描述符表示该进程打开了多少文件。
另外Linux
默认的进程打开文件上限是1024个,可以通过ulimit
-n查看。很多系统上限可以通过修改/etc/security/limits.conf文件改变,这个文件有详细的注释,对如何修改做了说明。如果希望
把所有用户的进程打开文件上限改为65536,可以加入下面两行
* soft nofile 65535
* hard nofile 65535
还可以只真对某个用户或某个组做修改,具体方法参见文件注释。修改后需要重新启动系统才能生效。学习linux基本命令,推荐《linux就该这么学》!
⑽ Linux操作系统中打开文件数量的查看方法
ulimit -a 查看系统文件打开数
查看所有进程的文件打开数
lsof |wc -l
指定查看某个进程打开的文件数
lsof -p pid |wc -l
修改Linux文件数和进程数
vim /etc/security/limits.conf
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
* 代表针对所有用户
noproc 是代表最大进程数
nofile 是代表最大文件打开数
ulimit -a
最大进程数
max user processes (-u) 4096
修改权限
vim /etc/security/limits.d/20-nproc.conf
* soft nproc unlimited
root soft nproc unlimited