百万级并发解锁ulimit,fs.file-max
# 临时生效
ulimit unlimited
sudo su
vim /etc/security/limits.conf
#文件添加,重启生效,注意*
* hard nofile 1000000 # 注意* 1200000,0x0fffff,1048576
* soft nofile 1000000 # 重启生效 1200000
* soft nproc 65535
* hard nproc 65535 # 修改最大句柄数限制,受限于/proc/sys/fs/nr_open最大值
# 全局所有用户进程能打开的文件数,9223372036854775807 longlongint 最大值
cat /proc/sys/fs/file-max
echo 9223372036854775807> /proc/sys/fs/file-max
vim /etc/sysctl.conf
fs.file-max=1000000 #加载最后,重启生效,全局最大文件句柄
fs.nr_open=2000000 #sysctl -p 生效,局部最大文件句柄
# 临时写入,1048576 1024 * 1024
sysctl -w fs.nr_open=100000000
cat /proc/sys/fs/nr_open
echo 1048576> /proc/sys/fs/nr_open
nr_open:
This denotes the maximum number of file-handles a process can allocate. Default value is 1024*1024 (1048576) which should be enough for most machines. Actual limit depends on RLIMIT_NOFILE resource limit.
file-max:
The value in file-max denotes the maximum number of filehandles that the Linux kernel will allocate. When you get lots of error messages about running out of file handles, you might want to increase this limit
file-max是内核可分配的最大文件数,nr_open是单个进程可分配的最大文件数,所以在我们使用ulimit或limits.conf来设置时,
如果要超过默认的1048576值时需要先增大nr_open值(sysctl -w fs.nr_open=100000000或者直接写入sysctl.conf文件)。
当然百万级别的单进程最大file-handle打开数应该也够
man 5 proc 找到file-max的解释

ulimit -n # 1024; 临时修改
sudo vi /etc/security/limits.conf
* hard nofile 1000000 # 注意* 1200000,0x0fffff,1048576
* soft nofile 1000000 # 重启生效 1200000
* soft nproc 65535
* hard nproc 65535 # 修改最大句柄数限制

cat /proc/sys/fs/file-max #全局所有用户进程所能打开的文件数,10 000;
sudo -s
echo 2000> /proc/sys/fs/file-max
exit

sudo vi /etc/sysctl.conf
fs.file-max=1000000 #加载最后,重启生效
fs.nr_open=2000000#sysctl -p 生效 sysctl -w fs.nr_open=100000000或者直接写入sysctl.conf文件
linux下nproc的作用,Linux句柄调优之nofile、nr_open、file-max


增加linux句柄数的限制
两个方面:
-增加局部文件句柄数,(为单个进程能够创建的文件句柄数,Linux的系统默认值为1024,也就是说,一个进程最多可以接受1024个socket连接。这是远远不够的,查看当前局部文件句柄数 ulimit -n)
-增加全局文件句柄数
临时 增加 局部文件句柄数: ulimit -n 10000,重启后失效;永久增加 修改/etc/security/limits.conf ,文件末尾添加
* hard nofile 1200000
* soft nofilt 1200000
修改后重启机器,才能生效;
hard 和soft 的区别
soft和hard为两种限制方式,其中soft表示警告的限制, hard表示真正限制.
*软限制(soft nofile),程序可动态调整至硬限制,只会做出warnning,
*硬限制(hard nofile)无法突破。
另外: nofile表示单进程能打开的最大文件数。
问题: nofile有上限,不是无穷大。
nofile有上限,不是无穷大。
nofile由内核参数nr_open定义的.
*在2.6.25内核之前 有个宏定义,定义了nofile的最大值,为1024*1024,正好是100万,
*在2.6.25内核及其之后 nofile的最大值通过/proc/sys/fs/nr_open来设置。
nr_open:
This denotes the maximum number of file-handles a process can allocate. Default value is 1024*1024 (1048576) which should be enough for most machines. Actual limit depends on RLIMIT_NOFILE resource limit.
查看nr_open的值:
cat /proc/sys/fs/nr_open
1048576

局部文件句柄数上限配置
可通过修改/ect/sysctl.conf 修改 fs.nr_open 值, sysctl -p生效
//查看
cat /ect/sysctl.conf
//修改
vim /ect/sysctl.cont
fs.nr_open=150000
生效的shell指令
sysctl -p
新的问题:局部的不能打过全局的限制 还有一个 Linux Kernel 能分配的全局文件句柄数限制
全局句柄数限制 :字面上看file-max, file-max确实像是对应最大文件数,而在Linux内核文档中它们两的解释是: file-max:
The value in file-max denotes the maximum number of filehandles that the Linux kernel will allocate. When you get lots of error messages about running out of file handles, you might want to increase this limit
查看全局文件句柄的限制
局部的不能大过全局的限制,查看我所有进程能够打开的最大文件数是多少
[root@cdh1 ~]# cat/proc/sys/fs/file-max
185213
增加全局文件句柄数
查看:cat /etc/sysctl.conf
配置文件 /etc/sysctl.conf
vim /etc/sysctl.conf
在文件末尾加上:fs.file-max=1000000

fs.file-max = 1500000
使配置文件生效: sysctl -p
特别注意:
局部文件句柄数一定不要超过全局文件句柄数!!!
把局部文件句柄数设置超过了全局文件句柄数,可能导致无法开机后无法登陆的现象!!!
A 机器发送针对 B 机器 FIN 的 ACK 后,进入 TIME - WAIT 状态,经过 2MSL ( Maximum Segment Lifetime )后,没有收到 B机器传来的报文,贝 lj 确定 B 机器已经收到 A 机器最后发送的 ACK 指令,此时 TCP连接正式释放。

图 23 中的红色字体所示的 TIME WAIT 和 CLOSE WAIT 分别表示主动关闭和被动关闭产生的阶段性状态,如果在线上服务器大量出现这两种状态,就会加重机器负载,也会影响有效连接的创建,因此需要进行有针对性的调优处理。
  • TIME_WAIT : 主动要求关闭的机器表示收到了对方的 FIN 报文,并发送出了 ACK 报文,进入 TIME WAIT 状态,等 2MSL 后即可进入到 CLOSED 状态。如果 FIN WAIT_1 状态下,同时收到带 FIN 标志和 ACK 标志的报文肘,可以直接进入 TIME WAIT 状态,而无须经过 FIN WAIT_2 状态。
  • CLOSE_WAIT: 被动要求关闭的机器收到对方请求关闭连接的 FIN 报文,在第一次 ACK 应答后,马上进入 CLOSE WAIT 状态。这种状态其实表示在等待关闭,并且通知应用程序发送剩余数据,处理现场信息,关闭相关资源。
  在 TIME WAIT 等待的 2MSL 是报文在网络上生存的最长时间,超过阈值便将报文丢弃。一般来说, MSL 大于 TTL 衰减至 0 的时间。在RFC793 中规定 MSL 为 2 分钟。但是在当前的高速网络中, 2 分钟的等待时间会造成资源的极大浪费,在高并发服务器上通常会使用更小的值。既然 TIME WAIT 貌似是百害而无利的,为何不直接关闭,进入 CLOSED 状态呢?原因有如下几点。
  第一,确认被动关闭方能够顺利进入 CLOSED 状态。如图 1-23 所示,假如最后一个 ACK 由于网络原因导致无法到达 B 机器,处于 LAST ACK 的 B 机器通常“自信”地以为对方没有收到自己的 FIN+ACK 报文,所以会重发。 A 机器收到第二次的 FIN+ACK 报文,会重发一次 ACK ,并且重新计时。如果 A 机器收到 B 机器的FIN+ACK 报文后,发送个 ACK 给 B 机器,就“自私”地立马进入 CLOSED 状态,可能会导致 B 机器无法确保收到最后的 ACK 指令,也无法进入 CLOSED 状态。这是A 机器不负责任的表现。
第二,防止失效请求。这样做是为了防止己失效连接的请求数据包与正常连接的请求数据包混淆而发生异常。
因为 TIME WAIT 状态无法真正释放旬柄资源,在此期间, Socket 中使用的本地端口在默认情况下不能再被使用。该限制对于客户端机器来说是无所谓的,但对于高并发服务器来说,会极大地限制有效连接的创建数量,成为性能瓶颈。所以,建议将高并发服务器 TIME WAIT 超时时间调小。
在服务器上通过变更/巳 tel sysctl. conf 文件来修改该省略值(秒): net.ipv4.tcp_fin_timeout = 30 (建议小于 30 秒为宜)。
修改完之后执行/ sbin/sysctl -p 让参数生效即可。可以通过如下命令
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'查看各连接状态的计数情况,为了使数据快速生效, 2MSL 从 2 40 秒更改为 5 秒。参数生效后如图 1 -25 所示, TIME WAIT 很快从 75 个降为 1 个。
如果想查看当前系统各个进程产生了多少旬柄,可以使用如下的命令。
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | more
linux:Too Many Open Files(打开的文件过多)_lsof 文件数大于 65535-CSDN 博客
检查系统对单个进程文件句柄的限制
用 ulimit -n 命令查询:
> ulimit -n
 65535或用 ulimit -a 命令查询 open files:
> 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) 255796
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
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) 255796
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited检查发生 Too Many Open Files 的进程的 Max open files
每个进程均会有对应的 Max open files 设置,用到的命令:
cat /proc/{pid}/limits |grep 'Max open files'检查结果:
> cat /proc/4837/limits |grep 'Max open files'
Max open files            4096                 4096                 files或:
> cat /proc/4837/limits
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             255796               255796               processes
Max open files            4096                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       255796               255796               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us进程使用了多少文件句柄
用到的命令:
> lsof -p pid | wc -l检查结果:
> lsof -p 4837 | wc -l
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
      Output information may be incomplete.
4169至此,发现了问题:ulimit 查询到最大 open files 数量是 65535, /proc/4837/limits 查询到 Max open files 数量是 4096,lsof 查询到的打开文件数量 4169。显然进程 4837 打开文件数量超过了 /proc/4837/limits 中的限制。
至于 lsof 查询到的打开文件数量是 4169 而不是 4096,这个还没搞清楚。
查 pid
> ps -ef | grep java系统参数调优和TCP协议栈网络参数调优两部分。
Linux操作系统参数调优如下:
1)系统全局允许分配的最大文件句柄数。
        sysctl -w fs.file-max=2097152
        sysctl -w fs.nr_open=2097152
        echo 2097152 > /proc/sys/fs/nr_open2)允许当前会话或进程打开文件句柄数。
 ulimit -n 1048576
TCP协议栈网络参数调优如下:
1)并发连接backlog设置。
        sysctl -w net.core.somaxconn=32768
        sysctl -w net.ipv4.tcp_max_syn_backlog=16384
        sysctl -w net.core.netdev_max_backlog=163842)TCP Socket读写Buffer设置。
        sysctl -w net.core.rmem_default=262144
        sysctl -w net.core.wmem_default=262144
        sysctl -w net.core.rmem_max=16777216
        sysctl -w net.core.wmem_max=16777216
        sysctl -w net.core.optmem_max=16777216
        #sysctl -w net.ipv4.tcp_mem='167772161677721616777216'
        sysctl -w net.ipv4.tcp_rmem='1024409616777216'
        sysctl -w net.ipv4.tcp_wmem='1024409616777216'3)TCP连接追踪设置。
        sysctl -w net.nf_conntrack_max=1000000
        sysctl -w net.netfilter.nf_conntrack_max=1000000
        sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=304)TIME-WAITSocket最大数量、回收与重用设置。
        net.ipv4.tcp_max_tw_buckets=1048576
        # 注意: 不建议开启該设置,NAT模式下可能引起连接RST
        # net.ipv4.tcp_tw_recycle = 1
        # net.ipv4.tcp_tw_reuse = 15)FIN-WAIT-2 Socket超时设置。
 net.ipv4.tcp_fin_timeout = 15
TCP/IP参考模型可以分为应用层、传输层、网络层、链路层。TCP和UDP在传输层,应用层除了刚才我们介绍的MQTT,还有HTTP、FTP等。因为MQTT运行于TCP协议之上,所以它的调优也离不开TCP的参数调优,数据库连接池的出现也是为了解决应用与数据库之间TCP的性能问题,当前很多应用,比如服务端和算法服务的交互也离不开TCP的传输。所以了解TCP的调优方式可以夯实这个技术领域调优的基础,一通百通。
内核参数修改了以下4个配置:
❑ulimit -n。该文件表示系统里打开文件描述符的最大值,查看之后,发现是1024,这个值偏小,我们调大一些。
❑somaxconnSocket。cat/proc/sys/net/core/somaxconn,该文件表示等待队列的长度,默认是128,我们调大到1000。
❑netdev_max_backlog。cat/proc/sys/net/core/netdev_max_backlog,该文件表示在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,我们将该值调整到1000。
❑tcp_max_syn_backlog。cat/proc/sys/net/ipv4/tcp_max_syn_backlog,该文件表示SYN队列的长度,默认为1024,加大队列长度为8192,以容纳更多等待连接的网络连接。
修改完毕以后,重新进行线上压测,然而问题没有解决,QPS也没有得到提升。
小窍门
本节主要是对/proc/sys/net/进行优化,该目录下的配置文件主要用来控制内核和网络层之间的交互行为,一些技巧补充如下:
1)/proc/sys/net/core/message_burst该文件表示写新的警告消息所需的时间(以1/10秒为单位),在这个时间内系统接收到的其他警告消息会被丢弃。这用于防止某些企图用消息“淹没”系统的人所使用的拒绝服务(Denial of Service)攻击。缺省:50(5秒)。
2)/proc/sys/net/core/message_cost该文件表示写每个警告消息相关的成本值。该值越大,越有可能忽略警告消息。缺省:5。
3)/proc/sys/net/core/netdev_max_backlog该文件表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。缺省:300。
4)/proc/sys/net/core/optmem_max该文件表示每个套接字所允许的最大缓冲区的大小。缺省:10240。
5)/proc/sys/net/core/rmem_default该文件指定了接收套接字缓冲区大小的缺省值(以字节为单位)。缺省:110592。
6)/proc/sys/net/core/rmem_max该文件指定了接收套接字缓冲区大小的最大值(以字节为单位)。缺省:131071。
7)/proc/sys/net/core/wmem_default该文件指定了发送套接字缓冲区大小的缺省值(以字节为单位)。缺省:110592。
8)/proc/sys/net/core/wmem_max该文件指定了发送套接字缓冲区大小的最大值(以字节为单位)。缺省:131071。
TIME_WAIT是TCP中一个很重要的状态,在大并发的短连接下,会产生很多TIME_WAIT,这会消耗很多系统资源;端口的数量只有65535,占用一个就会少一个,进而严重影响新连接。所以需要调优TCP参数,从而让系统更快地释放TIME_WAIT的连接。TCP的传输连接有连接建立、数据传送和连接释放3个阶段,多年前在与阿里巴巴公司叶军博士一次闲聊中得知,作为阿里巴巴公司面试官他经常会考察应聘者TCP的3次握手和4次挥手这个知识点。
对于TIME_WAIT,我们主要进行如下的修改:
        net.ipv4.tcp_tw_recycle = 1
        net.ipv4.tcp_tw_reuse = 1这两个参数默认是关闭的,但是不建议开启该设置,NAT模式下可能引起连接RST。这两个参数的作用是主动断连接,它由于违反了TCP协议(RFC 1122),在其官方文档中也强调“It should not be changed without advice/request oftechnical”。
下面4个是TCP主要内核参数的说明:
❑net.ipv4.tcp_syncookies = 1表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击。默认为0,表示关闭。
❑net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。默认为0,表示关闭。
❑net.ipv4.tcp_tw_recycle = 1表示开启TCP连接中TIME-WAIT sockets的快速回收。默认为0,表示关闭。
❑net.ipv4.tcp_fin_timeout修改系统默认的TIMEOUT时间。
我们可以再继续进行并发连接backlog调优,并对可用端口调优范围、TCP Socket读写Buffer、TIME-WAIT Socket最大数量、FIN-WAIT-2 Socket超时设置等进行优化。特别说明一下,tcp_max_tw_buckets用于控制并发时,TIME_WAIT的数量默认值是180000,如果超过,系统会清除多余的,并警告“time wait bucket table overflow”。这些参数的调优不但能够提升服务器的负载,还可以在一定程度上防御DDoS等攻击。
在参数调优之后,又上了一道双保险,重新修改了com.sun.mail.smtp源码的SO_REUSEADDR,通过serverSocket.setReuseAddress(true)让其在服务器绑定端口前生效,目的是让端口释放后立即就可以被再次使用。
解决linux打开文件数1024限制的解决办法
24 十
1、/etc/pam.d/login 添加
session required /lib/security/pam_limits.so
注意看这个文件的注释
2. /etc/security/limits.conf 添加
www – nofile 1006154
www 是一个用户,如果是想所有用户生效的话换成 * ,设置的数值与硬件配置有关,别设置太大了。
—————————————————————————–
3. 修改 /etc/rc.local 添加
echo 8061540 > /proc/sys/fs/file-max
做完3个步骤,就可以了。
补充说明:
/proc/sys/fs/file-max
该文件指定了可以分配的文件句柄的最大数目。如果用户得到的错误消息声明由于打开文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。可将这个值设置成有任意多个文件,并且能通过将一个新数字值写入该文件来更改该值。
缺省设置:4096
/proc/sys/fs/file-nr
该文件与 file-max 相关,它有三个值:
已分配文件句柄的数目
已使用文件句柄的数目
文件句柄的最大数目
该文件是只读的,仅用于显示信息。
关于“打开文件数”限制
Linux系统上对每一个用户可使用的系统资源都是有限制的,这是多用户系统必然要采用的一种资源管理手段,试想假如没有这种机制,那么任何一个普通用户写一个死循环程序,用不了多久系统就要“拒绝服务”了。
今 天我遇到了tomcat日志报的错误信息”too many open files”,第一意识就想到了是ulimit控制的”open files“限制。然而问题来了。我在/etc/profile里加入了 ulimit -n 4096保存之后,普通用户登录的时候均会收到一条错误信息ulimit: open files: cannot modify limit: Operation not permitted。然后普通用户的open files限制还是默认值1024。
然后开始在互联网上搜索关于ulimit的信息。互联网果然方便,信息铺天盖地。大家也可以搜一下试一下。其中我了解到两个以前不知道的相关内容。
第一个是内核参数 fs.file-max ,影射为 /proc/sys/fs/file-max
第二个是配置文件 /etc/security/limits.conf
其 中大部分的信息中提到 将 /proc/sys/fs/file-max的值设置为4096和ulimit -n 4096是相同的效果。对此我很怀疑,为什么呢?首先ulimit 是一个普通用户也可以使用的命令,而fs.file-max只有root有权设置。其次,很明显fs.file-max是一个全局的设置,而ulimit 是一个局部的设置,很明显的是不相同的。
带着疑虑,又在网上搜索了许久,未果(实际上是我搜索的关键字不够准确)。
最后终于在内核文档/usr/src/linux/Documentation/sysctl/fs.txt里找到下面一段话:
file-max & file-nr:
The kernel allocates file handles dynamically, but as yet it doesn’t free them again. The value in file-max denotes the maximum number of file-handles that the Linux kernel will allocate. When you get lots of error messages about running out of file handles, you might want to increase this limit.
The three values in file-nr denote the number of allocated file handles, the number of unused file handles and the maximum number of file handles. When the allocated file handles come close to the maximum, but the number of unused file handles is significantly greater than 0, you’ve encountered a peak in your usage of file handles and you don’t need to increase the maximum.
这两段话的大致意思是:
内核动态地分配和释放“file handles”(句柄)。file-max的值是内核所能分配到的最大句柄数。当你收到大量关于句柄用完的错误信息时,你可以需要增加这个值以打破老的限制。
file- nr中的三个值的含意分别是:系统已经分配出去(正在使用)的句柄数,没有用到的句柄数和所有分配到的最大句柄数。当分配出去的句柄数接近 最大句柄数,而“无用的句柄数”大于零时,表明你遇到了一个“句柄”使用高峰,这意为着你不需要增加file-max的值。
看完这段话,相信大家都明白了。file-max是系统全局的可用句柄数。根据我后来又翻查的信息,以及对多个系统的查看求证,这个参数的默认值是跟内存大小有关系的,增加物理内存以后重启机器,这个值会增大。大约1G内存10万个句柄的线性关系。
再 回过头来看这两段话,不知道你意识到了没有,文中只提到了file-max的增加,而没有提到了该值的减少。那些在操作ulimit时同时操 作了file-max的哥们儿,估计无一例外地将file-max设置成了4096或者2048。但以似乎也没有因此而导致系统无法打开文件或者建议连 接。(实际上,我将file-max的值设备成256,然后使用shell编 写用vi打开500个文件角本运行,并没有得到任何错误信息,查看file- nr的值,系统当前分配的句柄值已经远超过了后面的最大值。所以我猜想对于file-max的任何减少的操作都是毫无意义的,姑且不去管他。实践中需要减 少file-max的时候总是不多见的。 )实事证明我犯了一个致命的错误。我测试的 时候使用的是root用户,而当我再次使用普通用户测试的时候,预料中的错误信息出现了:”Too many open files in system”。可见,file-max的减少对系统也是影响力的。前面的结论“所以我猜想对于file-max的任何减少的操作都是毫无意义的”是错误 的。
然后便是/etc/security/limits.conf文件,这个文件很简单,一看就能明白。
于是我按照注释中描述的格式两个两行:
* soft nofile 4096
* hard nofile 4096
恐 怖的是,网上居然有人说改了这个设置是需要重启系统的!实在是让人想不通啊,鼎鼎大名的UNIX系统,怎么可能因为这么小小的一个改动就需要 重启系统呢?结果当我再次以普通用户登录的时候,那个”ulimit: open files: cannot modify limit: Operation not permitted”提示没有了,查看ulimit -n,果然已经变成了4096。
linux lsof 修改句柄限制(转)
在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 把上面命令加到最后。
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号