目录

  • 1 问题说明
  • 2 修改max open files
  • 3 修改max user processes
  • 4 附录: 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 -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)  1031426
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)  10240      # 栈大小
cpu time                (seconds, -t)  unlimited  # CPU时间
max user processes               (-u)  131072
virtual memory           (kbytes, -v)  unlimited  # 虚拟内存大小
file locks                       (-x)  unlimited

(1) 短期修改, 重启服务器后即失效:

# 把文件句柄数改为65535
ulimit -n 65535
# 也可用下属方式修改:
ulimit -SHn 65535
# 其中-S是soft软限制模式, -H指hard硬限制模式;
# 默认是软限制, 如果只指定-n, 那就会同时配置-SH.

(2) 永久修改, 重启服务器也不变:

网络上常见的方式有如下三种:

① 在/etc/security/limits.conf最后增加如下两行记录:

# nofile - 可以打开的最大文件数, *通配符表示对所有用户有效
*   soft      nofile     65535
*   hard      nofile     65535

修改完成后保存, 退出当前用户并重新登录(不用重启服务器), 当前修改就会生效.

② 在/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     1024
root       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 filesmax 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 MemTotal
MemTotal:       115571480 kBecho "115571480 / 128" | bc
902902ulimit -u
902682
# 算出来default_nproc = 902902, 和实际的902682很接近,
# 因为物理页面会存储一些关键数据, 所以实际的比计算出来的要小一些. 

4 附录: ulimit命令说明

(1) 列出所有当前资源极限, 命令为: ulimit -a, 其他命令可参考输出信息中括号内的提示:

# ulimit -a 命令的输出信息:
core file size           (blocks, -c) 0
data seg size            (kbytes, -d) unlimited  # 一个进程的数据段的最大值
scheduling priority              (-e) 0
file size                (blocks, -f) unlimited  # Shell创建文件的最大体积, 1block = 512bytes
pending signals                  (-i) 1031426    # 最多允许多少个待处理的信号
max locked memory        (kbytes, -l) 64         # 每个进程可以锁住的物理内存的最大值
max memory size          (kbytes, -m) unlimited  # 每个进程可以使用的常驻内存的最大值
open files                       (-n) 65535      # 每个进程可以同时打开的最大文件数, 不能是unlimited
pipe size             (512 bytes, -p) 8          # 管道的最大值, 1block = 512bytes
POSIX message queues      (bytes, -q) 819200     # POSIX的消息队列的最大值
real-time priority               (-r) 0
stack size               (kbytes, -s) 10240      # 单个进程能够使用的最大栈大小
cpu time                (seconds, -t) unlimited  # 单个进程的最大CPU时间, 也就是可使用CPU的秒数, 到硬极限时, 这个进程就会立即自杀; 到软极限时, 每秒发送一次限制超时信号SIGXCPU
max user processes               (-u) 131072     # 单个用户可同时运行的最大进程数, 不能是unlimited
virtual 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

版权声明

作者: 马瘦风

出处: 博客园 马瘦风的博客

您的支持是对博主的极大鼓励, 感谢您的阅读.

本文版权归博主所有, 欢迎转载, 但请保留此段声明, 并在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.

转载于:https://www.cnblogs.com/shoufeng/p/10620480.html

Linux - 修改系统的max open files、max user processes (附ulimit的使用方法)相关推荐

  1. Linux修改系统时间、时区

    Linux修改系统时间.时区 查看现在时区 查看时区命令:date -R root@ids:~# date -R Wed, 08 Jul 2020 01:58:11 +0000 可以看到现在时区为+0 ...

  2. linux 修改系统时间和日期,Linux 修改系统日期和时间

    Linux 修改系统日期和时间 一.文本模式下修改 命令及参数选项:date -s 示例如下: #date -s 04/11/2008 ------将系统时间设定成2008年4月11日 #date - ...

  3. libwebsockets库3.2.1版本lws_service在某些linux修改系统时间后出现阻塞问题

    libwebsockets库3.2.1版本lws_service在某些linux修改系统时间后出现阻塞问题,只是有些linux的系统会出现这种问题,如果出现问题.可以考虑不使用libwebsocket ...

  4. Linux修改系统时间为东八区北京时间(更换时区)

    文章目录 1. Linux时间 2. 查看系统时间 3. 查看硬件时间 4. 删除本地时间 5. 创建软连接 6. 时间同步(阿里服务器时间) 7. 若提示 command not found,则安装 ...

  5. qt linux 修改系统时间,linux改变系统时间

    linux修改系统时间 linux 2009-03-04 15:23:18 阅读1710 评论0 字号:大中小 订阅 Linux下的时间分为两种,系统时间与硬件时间.我们一般看到的时间就是系统时间,比 ...

  6. linux使用date命令修改系统日期,使用date命令设置CentOS Linux修改系统日期和时间...

    您可以使用date命令来修改CentOS Linux的时间 修改日期: 将时间设置为2014年6月20日的命令如下: #date -s 2014年6月20日 修改时间: 将系统时间设置为14:20:0 ...

  7. suse linux修改系统时间,linux时间和时区修改(附suse)

    1.查看系统时间 [root@test3 ~]# date Thu Dec 20 23:25:33 CST 2012 [root@test3 ~]# date +"%Y%m%d %H:%m: ...

  8. oracle修改时间命令,linux 修改系统时间 oracle查询当前时间命令

    1.Linux 操作系统 下查看和修改系统时间 [root@as4forora ~]# date -s 07/01/2008 二 7月 1 00:00:00 CST 2008 [root@as4for ...

  9. Linux 修改系统时间的两种方式

    一:更新系统时间的方式 1.手动修改 通过相关工具来手动修改系统的时间. 2.自动同步 使用NTP自动同步系统时间. 二:手动修改系统时间 1.date工具 作用:显示和设置系统时间 选项: -d & ...

  10. Linux修改系统日期和时间

    1.进入root账户下. suroot 或 su root 修改系统日期与时间date -s "2022-01-23 10:25:25" [root@localhost ~]# d ...

最新文章

  1. [Ext JS 4] 实战Chart 协调控制(单一的坐标,两个坐标)
  2. ORACLE 中dbms_stats的使用
  3. 修改xampp的mysql默认密码
  4. 一致 Hash 算法
  5. centos7 ssh 密码拒绝_Centos7的ssh connection refused
  6. 【无标题】科大星云诗社动态20201206
  7. AI基础:特征工程-数字特征处理
  8. sql 语言中 when case 用法
  9. log函数 oracle power_Excel之数学函数SQRT/MOD/EXP/LN/RAND
  10. c语言通讯录打电话,求c语言编写的通讯录源代码
  11. 27 Server Sockets
  12. 腾讯或推动斗鱼虎牙合并;拼多多推出“百亿补贴节”;Electron 9.2.0 发布| 极客头条
  13. onvif协议之抓图
  14. Java 面试——数据类型计算与拆箱装箱
  15. ASP.NET学习 asp‘s one word
  16. AWS韩小勇为创业者详细解读云服务商如何为他们提供服务
  17. 安卓双摄像头录像_usb双摄像头app下载
  18. 中国势力主导NGN建设 华为中兴ASB三足鼎立
  19. Java中的七种设计原则
  20. EspTouch概述

热门文章

  1. 无所不能的『十五郎』向您致敬!!!
  2. 基于WinForm的多语言开发之界面加载
  3. poj Gone Fishing 枚举加贪心 当初做的很纠结啊!!终于A了,与大家分享一下经验
  4. 苹果Mac重复文件清理工具:​​​​Tidy Up
  5. fcpx教程从入门到精通「3」预览窗口的认识
  6. Disk Expert Pro for Mac(磁盘分析管理工具)
  7. 零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通!...
  8. Android Studio快捷键-mac版
  9. [转]整理关于java的String 类,equals函数和比较操作符的区别
  10. 看完微软大神写的 求平均值代码,我意识到自己还是 too young 了