linux为redhat服务器版本(非个人版),必须设置的内容
----------------------------------------------------------------------------
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 把上面命令加到最后。
仍未处理的问题:
为什么redhat9的个人版按照以上的方式修改1024tcp连接限制依然不行呢?
是因为个人版最多支持1024个tcp连接,还是修改方式、相关文件会有所不同?
相关推荐
本文将深入探讨Linux如何管理打开文件数,包括查看当前打开文件数的方法、理解系统限制以及如何调整这些限制。 ### 查看当前打开文件数 在Linux中,可以通过多种方式来查看当前系统打开的文件数。最常见的方法是...
修改linux进程可打开的文件数的限制open files linux中一切都是文件 默认linux一个进程可打开1024个文件 大并发需要达到5万个文件描述符FD,你必须修改该参数值才行
例如,要限制所有用户的最大打开文件数,可以在`limits.conf`文件中添加一行`* soft nofile 2048`。这里的`*`代表所有用户,`soft`表示软限制,`nofile`表示文件描述符限制,`2048`是限制的数值。硬限制的设置方法...
这个限制通常被称为“最大打开文件数”,它由`ulimit`命令来控制。`ulimit -n`命令用于查看或设置一个用户在单个会话中能打开的最大文件句柄数。值得注意的是,`ulimit`命令对root用户无效,因为root用户不受这些...
### Linux 最大打开文件数限制修改方法 #### 前言 在Linux系统中,为了保护系统的稳定性与安全性,每个...以上内容提供了关于Linux最大打开文件数限制修改方法的详细指南,希望能够帮助到需要解决此类问题的读者们。
linux下文件描述符最大限制默认最大为1024,通过 [root@localhost ~]# ulimit -n 1024 这个命令可以查看。此值可以修改。 进程的文件描述符,可以通过 [root@localhost ~]# ls -al /proc/13623/fd |wc -l 59 输出...
并发连接数受限于linux可打开文件数,这个数是可以配置的,可以非常大,所以实际上受限于系统性能。 现在做服务器开发不加上高并发根本没脸出门,所以为了以后吹水被别人怼“天天提高并发,你自己实现的最高并发是...
除了用户级别的限制,还有整个系统级别的最大打开文件数限制,可以通过`cat /proc/sys/fs/file-max`查看。这个限制是所有用户级限制的总和,不应该超过硬件能承受的范围。如果需要调整,可以在`/etc/rc.local`中...
在Linux操作系统中,...总之,理解并调整Linux中的文件打开数限制是解决“Too many open files”问题的关键。通过监控和优化进程的文件管理,以及适当地调整系统和用户级别的限制,可以确保程序能够高效稳定地运行。
默认情况下,Linux 系统的打开文件数量限制是 1024,可以通过修改这个值来增加可以打开的文件数。 临时修改 可以使用 `ulimit -n 2048` 命令临时修改打开文件数量限制为 2048。当你把打开文件数量限制值增大到一定...
-n选项限制打开文件数量; -p选项限制管道大小; -s选项限制栈大小; -t选项限制CPU时间; -u选项限制用户最大进程数; -v选项限制虚拟内存大小。 /proc/sys/fs/suid_dumpable 这个文件用于控制具有suid位集的程序...
然而,需要注意的是,修改用户进程可打开文件数限制需要修改 Linux 系统对用户的软限制和硬限制。软限制是指 Linux 在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统硬件资源状况计算...
再次执行 ulimit 命令,可以看到打开文件的限制数已改为 65535 了。 `ulimit -n 65535` 结论 Linux 的 source 命令找不到的解决方法是切换到 root 用户,然后执行 source 命令。如果直接执行 ulimit 命令,可能会...
这将设定单个进程最大的打开文件句柄数量为 4096,包括硬性限制和软性限制。 进程句柄数设置是一个重要的参数,对于需要处理大量请求的应用来说,需要调整系统参数,以适应应用变化。同时,需要注意硬性限制和软性...
file-nr 文件中包含三个数字:第一个数字表示已经分配了的文件描述符数量,第二个数字表示空闲的文件句柄数量,第三个数字表示能够打开文件句柄的最大值(跟 file-max 一致)。 此外,Linux 系统中还存在 ulimit ...
为了解决这个问题,我们可以从两个方面入手:一是查看和调整当前会话的文件限制,二是修改系统级别的文件打开数限制。 首先,每个运行在Linux系统中的进程都有一个可以打开文件的最大数量限制。这个限制包括了文件...
再次执行 `ulimit` 命令,可以看到打开文件的限制数已改为 65535 了。 `# ulimit -n 65535` 总结: 在 Linux 系统中,source 命令是一种非常有用的命令,但有时候可能会出现找不到命令的情况。今天我们讨论了这个...
为了提高 Linux 操作系统中的 TCP 连接数,我们需要分别修改用户进程可打开文件数限制、网络端口限制和系统对 TCP 连接的跟踪限制。通过修改 `/etc/security/limits.conf` 文件、`/etc/rc.d/rc.local` 文件和 `/etc/...