在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 把上面命令加到最后。(findsun提出的办法比较合理)
在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many fi...
linux
最大
打开
文件
句柄
数,即
打开
文件
数
最大
限制,就是规定的单个
进程
能够
打开
的
最大
文件
句柄
数量(Socket连接也算在里面,默认大小1024)
liunx中
文件
句柄
有两个限制,一种是用户级的,一种是系统级的(也叫内核级)
系统级的
最大
限制:
cat /proc/sys/fs/file-max
用户级的
最大
限制
ulimit -n(默认是1024,向阿里云华为云这种云主机一般是65535)
附ulimit 参数说明:
查看某个
进程
的
最大
打开
文件
数和当前
打开
文件
数
先找到该
进程
的
进程
大家知道在
linux
服务器大并发调优时,往往需要预先调优
linux
参数,其中修改
linux
最大
文件
句柄
数是最常修改的参数之一。
在
linux
中执行ulimit -a 即可查询
linux
相关的参数,如下所示:
[root@mongodb11 ~]# ulimit -acore file size (blocks, -c) 0data seg size (kb...
`报错“max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]”`
`3.1.查看当前值`
`3.2.临时修改`
Too many open files
如果Java
打开
文件
的时候,没有关闭IO流,那么
打开
到一定数量,在
Linux
下就会抛出Too many open files的异常。
public static class HoldIOTask implements Runnable {
@Override
public void run() {
int count=0;
try {
while(t
背景:
linux
系统里,
最大
打开
的
文件
句柄
数(也即是
打开
文件
数
最大
限制值),按约定的单个
进程
能够
打开
的
最大
文件
句柄
数量,默认大小为:1024。
句柄
限制类型
系统级
最大
限制(内核级别)
cat /proc/sys/fs/file-max
用户级
最大
限制
ulimit -n
备注:默认值为:1024,例如常见的阿里云、华为云类型的云主机一般值为:65535 。
修改
最大
限制值
用户级的临时修改方法:ulimit -SHn 65535
注意:系统重启后失效!
用户级的永久修改方法:..
文件
描述符(File Descriptor):
文件
描述符是
文件
句柄
的一部分,它是
一个
非负整数,用于标识
打开
的
文件
。在编写应用程序时,需要注意
文件
句柄
的使用,避免
打开
过多的
文件
句柄
,从而导致系统的
文件
描述符资源紧张。
文件
句柄
用于标识
打开
的
文件
,每个
打开
的
文件
都有
一个
唯一的
文件
句柄
。当
打开
一个
文件
时,操作系统会为该
文件
分配
一个
文件
句柄
,并将其返回给应用程序。
文件
位置指针(File Position Pointer):
文件
位置指针用于标识
文件
中的当前位置,应用程序可以使用它来读取或写入
文件
。
该命令会输出三个数字,分别表示当前已分配的
文件
句柄
数、当前已使用的
文件
句柄
数和系统
最大
允许的
文件
句柄
数。其中,第
一个
数字表示已分配但未使用的
文件
句柄
数,第二个数字表示已经使用的
文件
句柄
数,第三个数字表示系统
最大
允许的
文件
句柄
数。
### 回答2:
在
Linux
中,每个
进程
都有
一个
默认的
文件
句柄
限制,用于限制
进程
能够
打开
的
文件
数量。如果
进程
试图
打开
超过这个限制的
文件
,则会收到
一个
错误。在大多数情况下,这个限制被设置为1024个
文件
句柄
,但是根据系统配置的不同,它也可能更高或更低。
在
Linux
中,可以使用许多不同的命令来检查当前的
文件
句柄
限制和
进程
打开
的
文件
句柄
数。以下是一些最常见的命令:
1. ulimit命令
ulimit是
一个
用于控制操作系统资源限制的命令,包括
文件
句柄
限制。默认情况下,ulimit -n命令将显示
进程
的
文件
句柄
限制。要查看当前
进程
已经
打开
的
文件
句柄
数,可以使用lsof命令。
2. /proc/sys/fs/file-max
文件
/proc/sys/fs/file-max是
一个
包含系统
文件
句柄
数的
文件
。这个值表示系统上允许的
最大
文件
句柄
数。要查看这个值,可以使用cat /proc/sys/fs/file-max命令。
3. lsof命令
lsof命令可以列出当前
进程
打开
的
文件
和网络连接。可以使用以下命令来列出当前
进程
打开
的
文件
数:
lsof -u username | wc -l
其中,username是
进程
所有者的用户名。这将返回
打开
的
文件
数。
4. ss命令
ss命令用于列出所有活动的套接字连接。可以使用以下命令来列出所有
进程
的
文件
句柄
数:
ss -s
这将返回所有
进程
当前
打开
的
文件
句柄
数量。
总的来说,在
Linux
中查看
文件
句柄
数可以使用既定的命令,如ulimit、/proc/sys/fs/file-max、lsof和ss等,但要注意选择
合适
的命令来查看所需的信息。
### 回答3:
在
Linux
系统中,
文件
句柄
数是指
进程
能够
保持的
打开
文件
的数量。每个
进程
在运行时都会分配一定数量的
文件
句柄
,而每次使用
文件
时,
进程
都会使用其中的
一个
句柄
来表示该
文件
。如果该
进程
打开
了过多的
文件
,就可能会导致
文件
句柄
耗尽,从而无法
打开
更多的
文件
。
要查看
Linux
系统中的
文件
句柄
数,可以使用以下命令:
1. 查看当前用户的
文件
句柄
数:
命令:ulimit -n
该命令将显示当前用户可以
打开
的
文件
句柄
数。如果该值为默认值,则通常为1024。如果需要增加
文件
句柄
数,可以编辑/etc/security/limits.conf
文件
并添加以下行:
* soft nofile 65535
* hard nofile 65535
这将允许所有用户同时
打开
多达65535个
文件
。
2. 查看某个
进程
的
文件
句柄
数:
命令:lsof -p <pid> | wc -l
该命令将显示指定
进程
的
文件
句柄
数。要查找特定
进程
的PID,请使用ps或top命令。
3. 查看系统中所有
进程
的
文件
句柄
数:
命令:cat /proc/sys/fs/file-nr
该命令将显示系统中所有
进程
使用的
文件
句柄
数,以及系统可以分配的
最大
文件
句柄
数。这个值应该是当前
文件
句柄
数和
文件
句柄
限制之间的最小值。如果当前的
文件
句柄
数接近
最大
数量,则可能需要增加
文件
句柄
的限制。
总之,要查看
Linux
系统中的
文件
句柄
数,可以使用ulimit、lsof和cat等命令。了解
文件
句柄
数的数量对于确保系统的稳定性和可靠性非常重要。