Linux - ulimit命令详解与修改不生效

简介: Linux - ulimit命令详解与修改不生效

【1】惯例抛异常

首先抛个异常:java.io.FileNotFoundException: (*********)Too many open files。

原因是由于linux限制了一次会话中,程序最大同时打开文件数目。

使用命令查看:

ulimit -n 
//默认值为1024

临时修改(退出会话失效):

ulimit -n XXXX

永久修改(修改/etc/security/limits.conf文件,设置用户最大打开文件数 ):

//文件末尾添加如下,具体大小建议65536
*   -    nofile     65536

20180623135125997.png

注意 nofile 参数在 type 类型上有2个可能的选项:hard 和 soft ,这两个值都需要设置,“-”代表同时设置这2个值为后面的数字。

hard limit 只是作为 soft limit 的上限,soft limit 才是你设置的系统当前限制。当你设置 hard limit 后,soft limit 的值就只能小于 hard limit 。普通用户可以降低 hard limit 的值,但是不能提高它,只有 root 用户才能提高 hard limit。

给个参考版本:

*        hard    nproc           64000
*        soft    nproc           64000
*        hard    nfile           64000
*        soft    nfile           64000
*        soft    stack      unlimited
*        soft    core     unlimited
*      soft    core     unlimited
*      hard  core     unlimited
*      soft  memlock    250000000
*    hard  memlock    250000000
*        -       nofile         65536

【2】root用户修改后其他用户不生效

在root用户修改为65536后,用其他用户登录服务器检测ulimit -n 还是1024。那么就是该用户未生效。

① 解决方案一

使用root用户进行如下操作:

vi /etc/ssh/sshd_config

将# UseLogin no修改如下:

UseLogin yes
//如果没升级 ssh 则添加修改如下
UsePAM yes

重启sshd服务 :

service  sshd restart

修改/etc/pam.d/login

#添加以下内容,注意写你自己系统pam_limits.so的绝对路径
session    required  /usr/lib64/security/pam_limits.so

修改/etc/security/limits.d/下的配置文件

[root@host-10-1-236-213 limits.d]# ll
total 4
-rw-r--r-- 1 root root 196 Jul 23 14:29 20-nproc.conf

如下图所示:


② 解决方案二

如果还不行(实际上已经改过来了,只是其他用户看到的是默认值),建议升级openssh或者重装openssh:

//查看你的版本
rpm -qa openssh
//安装最新版本
yum install openssh.x86_64

重装openssh如下:

//查看你的版本
rpm -qa openssh
yum remove 上面查看的版本
//安装服务
yum install openssh openssh-server openssh-clients
//重启服务
service sshd restart  

注意,重装ssh会恢复使用默认端口22,如有必要还需修改端口:

vim  /etc/ssh/sshd_config

如果直接使用其他用户如test登录之后ulimit -n还是1024并且着急使用,那么不妨尝试使用root用户登录然后切换到test用户再操作。


③ 重启ssh服务失败

重启sshd服务可能等待蛮久,然后提示失败。这时候使用命令systemctl status sshd.service查看状态会看到失败,但是毫无有用信息,使用命令journalctl -xe查看会看到异常信息。

异常实例如下:

sshd.service start operation timed out. Terminating.
sshd[8425]: Received signal 15; terminating.
systemd[1]: Failed to start OpenSSH server daemon.
-- Subject: Unit sshd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit sshd.service has failed.
-- 
-- The result is failed.
systemd[1]: Unit sshd.service entered failed state.
systemd[1]: sshd.service failed.
polkitd[457]: Unregistered Authentication Agent for unix-process:8419:67059806 (system bus name :1.2658, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)

这里可以进行针对性解决,比如关闭selinux,我这里采用的是重装sshd服务。


【3】ulimit命令详解

① 是什么

ulimit命令用来限制系统用户对shell资源的访问。

解释如下:

假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源限制的情况下,这 10 个用户同时打开了 500 个文档,而假设每个文档的大小有 10M,这时系统的内存资源就会受到巨大的挑战,而实际应用的环境要比这种假设复杂的多。

例如在一个嵌入式开发环境中,各方面的资源都是非常紧缺的,对于开启文件描述符的数量,分配堆栈的大小,CPU 时间,虚拟内存大小,等等,都有非常严格的要求。资源的合理限制和分配,不仅仅是保证系统可用性的必要条件,也与系统上软件运行的性能有着密不可分的联 系。这时,ulimit 可以起到很大的作用,它是一种简单并且有效的实现资源限制的方式。

ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。

作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。而对于长期的固定限制,ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户。


② 语法格式

语法如下:

ulimit(选项)

选项如下:

-a:显示目前资源限制的设定;
-c <core文件上限>:设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制;
-t <CPU时间>:指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。

实例如下:

[root@localhost ~]# ulimit -a
core file size          (blocks, -c) 0           #core文件的最大值为100 blocks。
data seg size           (kbytes, -d) unlimited   #进程的数据段可以任意大。
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited   #文件可以任意大。
pending signals                 (-i) 98304       #最多有98304个待处理的信号。
max locked memory       (kbytes, -l) 32          #一个任务锁住的物理内存的最大值为32KB。
max memory size         (kbytes, -m) unlimited   #一个任务的常驻物理内存的最大值。
open files                      (-n) 1024        #一个任务最多可以同时打开1024的文件。
pipe size            (512 bytes, -p) 8           #管道的最大空间为4096字节。
POSIX message queues     (bytes, -q) 819200      #POSIX的消息队列的最大值为819200字节。
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240       #进程的栈的最大值为10240字节。
cpu time               (seconds, -t) unlimited   #进程使用的CPU时间。
max user processes              (-u) 98304       #当前用户同时打开的进程(包括线程)的最大个数为98304。
virtual memory          (kbytes, -v) unlimited   #没有限制进程的最大地址空间。
file locks                      (-x) unlimited   #所能锁住的文件的最大个数没有限制。

【Tips】

查看系统可接受的最大打开文件数(一般默认已足够,不用修改)

cat /proc/sys/fs/file-max


目录
相关文章
|
6月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
724 1
二、Linux文本处理与文件操作核心命令
|
6月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
431 137
|
6月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1097 58
|
9月前
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
798 143
linux命令—tree
|
5月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1013 2
|
6月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
544 0
Linux内存问题排查命令详解
|
6月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
520 16
|
8月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
1412 13
|
9月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
1546 21
|
9月前
|
监控 Linux
Linux系统中使用df命令详解磁盘使用情况。
`df`命令是Linux系统管理员和用户监控和管理磁盘空间使用的重要工具。掌握它的基本使用方法和选项可以帮助在必要时分析和解决空间相关问题。简洁但功能丰富,`df`命令确保了用户可以快速有效地识别和管理文件系统的空间使用情况。
642 13