Linux |
您所在的位置:网站首页 › linux修改openfiles限制 › Linux |
Linux - 修改系统的max open files、max user processes(附ulimit的使用方法)目录 1 问题说明2 修改max open files3 修改max user processes4 附录: ulimit命令说明1 问题说明Linux 系统默认的 max open files = 1024, 在大内存服务器中, 如果运行负载比较大的程序, 很容易发生 error: too many open files, 特别是提供大量静态文件访问的Web服务器、缓存服务器中这种错误更加常见. open files 表示系统级别的能够打开的文件句柄的数量, 是系统级别的安全策略: 限制所有应用打开的文件数量. 发生 error: too many open files 时, 如果不好定位程序问题, 可在系统的配置文件中做一定的修改. 为了让服务器重启之后, 配置仍然有效, 需要用永久生效的配置方法进行修改. 2 修改max open files说明: 这里以Cent OS 6.5为例. 使用 ulimit -a 命令可以查看当前系统的所有限制值, 括号中的命令是查看单项限制值的方式, 比如要查看系统可打开的最大文件数量(open files), 就可以用 ulimit -n 命令: (具体命令说明请参考末尾部分的附录) [root@localhost ~]# ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimited # 数据段长度scheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 1031426max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimited # 最大内存大小open files (-n) 65536 # 最大打开文件数pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 10240 # 栈大小cpu time (seconds, -t) unlimited # CPU时间max user processes (-u) 131072virtual memory (kbytes, -v) unlimited # 虚拟内存大小file locks (-x) unlimited(1) 短期修改, 重启服务器后即失效: 把文件句柄数改为65535ulimit -n 65535 也可用下属方式修改:ulimit -SHn 65535 其中-S是soft软限制模式, -H指hard硬限制模式; 默认是软限制, 如果只指定-n, 那就会同时配置-SH.(2) 永久修改, 重启服务器也不变: 网络上常见的方式有如下三种: ① 在 /etc/security/limits.conf 最后增加如下两行记录: nofile - 可以打开的最大文件数, *通配符表示对所有用户有效 soft nofile 65536 hard nofile 65536修改完成后保存, 退出当前用户并重新登录(不用重启服务器), 当前修改就会生效.② 在 /etc/profile 中增加一行 ulimit -SHn 65535, 然后运行 source /etc/profile 命令让修改立即生效. —— /etc/profile 文件是所有系统用户的配置文件, 修改后会影响当前系统的所有注册用户. ③ 在 /etc/rc.local 文件中增加一行 ulimit -SHn 65535, 修改完后, 重启服务器就可生效. 值得注意的是, 博主在CentOS 6.5系统中测试, 发现只有第 ① 和第 ② 种方式才有效. 另外, 在《阿里巴巴Java开发手册》中, 关于最大文件句柄数有这样的描述: 【推荐】调大服务器所支持的最大文件句柄数(File Descriptor,简写为fd)。 说明:主流操作系统的设计是将 TCP/UDP 连接采用与文件一样的方式去管理,即一个连接对应于一个 fd。主流的 Linux 服务器默认所支持最大 fd 数量为 1024,当并发连接数很大时很容易因为 fd 不足而出现“open too many files”错误,导致新的连接无法建立。 建议将 Linux 服务器所支持的最大句柄数调高数倍(与服务器的内存数量相关)。 3 修改max user processes(1) 问题描述: 在使用Java程序多线程大批量生成模拟数据时, Cent OS报出如下错误: ulimit: max user processes: cannot modify limit错误说明: Linux系统为每个用户都设置了一个最大进程数, 这个特性可以让我们控制服务器上现有用户可以创建的进程数量. (2) 查看 max user processes: 与查看max open files类似, 可使用 ulimit -u查看max user processes:ulimit -u(3) 修改 max user processes: ① 方案一: 修改 /etc/security/limits.conf 文件, 在文件最后添加下述内容: soft nproc 131072 hard nproc 131072② 方案二: 修改 /etc/security/limits.d/90-nproc.conf文件, 在文件最后添加下述内容: 用户进程数的默认限制, 下面这个是对root外的其他用户限制max user processes, 要注释掉: * soft nproc 1024root soft nproc 131072(4) 关于nproc配置信息的扩展说明: 对 max user processes 的配置, Linux系统默认先读取 /etc/security/limits.conf 中的信息, 如果 /etc/security/limits.d/ 目录下还有配置文件的话, 也会依次遍历读取, 最终, /etc/security/limits.d/ 中的配置会覆盖 /etc/security/limits.conf 中的配置. 另外, max open files 和 max user processes 是不能配置 unlimited 的 —— 极不安全的设置, 此时系统会使用默认的配置值. 对 nproc 而言, 默认值的计算方法为: 计算公式为:default_nproc = max_threads / 2; 其中, max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE); mempages是机器的物理页面个数, THREAD_SIZE=8K, 所以, 计算公式为:default_nproc = max_threads / 2 = (mempages * PAGE_SIZE) / ( 2 * 8 *THREAD_SIZE ) = total_memory / 128K; 计算本机默认nproc配置:cat /proc/meminfo | grep MemTotalMemTotal: 115571480 kB echo "115571480 / 128" | bc902902 ulimit -u902682 算出来default_nproc = 902902, 和实际的902682很接近, 因为物理页面会存储一些关键数据, 所以实际的比计算出来的要小一些.4 附录: ulimit命令说明(1) 列出所有当前资源极限, 命令为: ulimit -a, 其他命令可参考输出信息中括号内的提示: ulimit -a 命令的输出信息:core file size (blocks, -c) 0data seg size (kbytes, -d) unlimited # 一个进程的数据段的最大值scheduling priority (-e) 0file size (blocks, -f) unlimited # Shell创建文件的最大体积, 1block = 512bytespending signals (-i) 1031426 # 最多允许多少个待处理的信号max locked memory (kbytes, -l) 64 # 每个进程可以锁住的物理内存的最大值max memory size (kbytes, -m) unlimited # 每个进程可以使用的常驻内存的最大值open files (-n) 65536 # 每个进程可以同时打开的最大文件数, 不能是unlimitedpipe size (512 bytes, -p) 8 # 管道的最大值, 1block = 512bytesPOSIX message queues (bytes, -q) 819200 # POSIX的消息队列的最大值real-time priority (-r) 0stack size (kbytes, -s) 10240 # 单个进程能够使用的最大栈大小cpu time (seconds, -t) unlimited # 单个进程的最大CPU时间, 也就是可使用CPU的秒数, 到硬极限时, 这个进程就会立即自杀; 到软极限时, 每秒发送一次限制超时信号SIGXCPUmax user processes (-u) 131072 # 单个用户可同时运行的最大进程数, 不能是unlimitedvirtual memory (kbytes, -v) unlimited # 每个进程可使用的最大虚拟内存file locks (-x) unlimited # 每个进程能锁住的最大文件个数(2) ulimit的其他命令: -H 设置某个给定资源的硬极限. 如果用户拥有root权限, 可以增大硬极限. 任何用户均可减少硬极限-S 设置某个给定资源的软极限, 软极限可增大到硬极限的值(3) 注意事项: ① 其中, unlimited 是指不限制用户可以使用的资源, 但这个设置对系统可打开的最大文件数(max open files)和各个用户可同时运行的最大进程数(max user processes)无效. ② 如果某个指标没有明确指定-H和-S限制, 那么当前的极限值就是 -H 和 -S 两者的极限值. 参考资料ulimit限制之nproc问题 linux修改max user processes limits 版权声明作者: ma_shoufeng(马瘦风) 出处: 博客园 马瘦风的博客 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |