Linux下使用ulimit提高系统性能具体方法 (linux显示隐藏的文件)

教程大全 2025-07-18 17:33:48 浏览

Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux用户的最大进程数,我们可以用uLIMIT来显示当前的各种用户进程限制,ulimit为shell内建命令,可用来控制shell执行程序的资源,本篇文章为大家讲解一下Linux下使用ulimit提高系统性能具体方法。

ulimit通过一些参数选项来管理不同种类的系统资源。在本节,我们将讲解这些参数的使用。

ulimit命令的格式为:

$[options][][options]-H:设置硬资源限制,一旦设置不能增加。如,-Hs64;限制硬资源,线程栈大小为64K。-S:设置软资源限制,设置后可以增加,但是不能超过硬资源设置。如,-Sn32;限制软资源,32个文件描述符。-a:显示当前所有的信息。如,-a;显示当前所有的信息。-c:最大的core文件的大小,以bLOCKs为单位。如,-cunlimited;对生成的core文件的大小不进行限制。-d:进程最大的数据段的大小,以Kbytes为单位。如,-dunlimited;对进程的数据段大小不进行限制。-f:进程可以创建文件的最大值,以blocks为单位。如,-f2048;限制进程可以创建的最大文件大小为2048blocks。-l:最大可加锁内存大小,以Kbytes为单位。如,-l32;限制最大可加锁内存大小为32Kbytes。-m:最大内存大小,以Kbytes为单位。如,-munlimited;对最大内存不进行限制。-n:可以打开最大文件描述符的数量。如,-n128;限制最大可以使用128个文件描述符。-p:管道缓冲区的大小,以Kbytes为单位。如,-p512;限制管道缓冲区的大小为512Kbytes。-s:线程栈大小,以Kbytes为单位。如,如,-s512;限制线程栈的大小为512Kbytes。-t:最大的CPU占用时间,以秒为单位。如,-tunlimited;对最大的CPU占用时间不进行限制。-u:用户最大可用的进程数。如,-u64;限制用户最多可以使用64个进程。-v:进程最大可用的虚拟内存,如,以Kbytes为单位。如,-v200000;限制最大可用的虚拟内存为200000Kbytes。

ulimit 作为对资源使用限制的一种工作,是有其作用范围的。那么,它限制的对象是单个用户,单个进程,还是整个系统呢?事实上,ulimit 限制的是当前 shell 进程以及其派生的子进程。举例来说,如果用户同时运行了两个 shell 终端进程,只在其中一个环境中执行了 ulimit -s 100,则该 shell 进程里创建文件的大小收到相应的限制,而同时另一个 shell 终端包括其上运行的子程序都不会受其影响。

$ll-hnewfile-rw-r--r--.1rootroot223K4月2309:16newfile$-f100$catnewfile>shell1Filesizeexceeded(coredumped)$ll-hshell1-rw-r--r--.1rootroot100K4月2309:20shell1
$catnewfile>shell2$ll-dshell2-rw-r--r--.1rootroot2276904月2309:23shell2$ll-hshell2-rw-r--r--.1rootroot223K4月2309:23shell2

那么,是否有针对某个具体用户的资源加以限制的方法呢?答案是有的,临时生效(不限制打开文件大小限制):

$-funlimited

或通过修改系统的/etc/security/limits.conf配置文件。该文件不仅能限制指定用户的资源使用,还能限制指定组的资源使用。该文件的每一行都是对限定的一个描述,格式如下:

domain 表示用户或者组的名字,还可以使用 * 作为通配符。Type 可以有两个值,soft 和 hard。Item 则表示需要限定的资源,可以有很多候选值,如 stack,cpu,nofile 等等,分别表示最大的堆栈大小,占用的 cpu 时间,以及打开的文件数。通过添加对应的一行描述,则可以产生相应的限制。例如:

*hardnoflle100

该行配置语句限定了任意用户所能创建的最大文件数是 100。现在已经可以对进程和用户分别做资源限制了,看似已经足够了,其实不然。很多应用需要对整个系统的资源使用做一个总的限制,这时候我们需要修改/proc下的配置文件。/proc目录下包含了很多系统当前状态的参数,例如/proc/sys/kernel/pid_max,/proc/sys/net/ipv4/ip_local_port_range等等,从文件的名字大致可以猜出所限制的资源种类。由于该目录下涉及的文件众多,在此不一一介绍。有兴趣的读者可打开其中的相关文件查阅说明。

在这一小节里向读者展示如何使用-d,-m 和-v 选项来对shell所使用的内存进行限制。首先我们来看一下不设置ulimit限制时调用ls命令的情况:

$llshell1-l-rw-r--r--.1rootroot2276904月2309:16shell1

大家可以看到此时的 ls 命令运行正常。下面设置 ulimit:

$-d1000-m1000-v1000这里再温习一下前面章节里介绍过的这三个选项的含义:-d:设置数据段的最大值。单位:KB。-m:设置可以使用的常驻内存的最大值。单位:KB。-v:设置虚拟内存的最大值。单位:KB。

通过上面的 ulimit 设置我们已经把当前 shell 所能使用的最大内存限制在 1000KB 以下。接下来我们看看这时运行 ls 命令会得到什么样的结果:

使用ulimit提高系统性能具体方法
$llshell1-lSegmentationfault(coredumped)

使用ulimit限制程序所能创建的socket数量

考虑一个现实中的实际需求。对于一个 C/S 模型中的 server 程序来说,它会为多个 client 程序请求创建多个 socket 端口给与响应。如果恰好有大量的 client 同时向 server 发出请求,那么此时 server 就会需要创建大量的 socket连接。但是在 Linux 下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件。在 Linux 下创建一个新的socket 连接,实际上就是创建一个新的文件描述符。而Linux对单进程能打开的文件描述符是有限制的,默认单进程能打开的最大文件数量为1024,。ulimit 并没有哪个选项直接说是用来限制socket的数量的。但是,我们有-n这个选项,它是用于限制一个进程所能打开的文件描述符的最大值。如下所示(查看某个进程当前打开的文件描述符信息):

$ll/proc/36766/fd总用量0lr-x------.1rootroot644月2309:310->/dev/nulll-wx------.1rootroot644月2309:311->/mydata/localhost.localdomain.errlrwx------.1rootroot644月2309:3110->/mydata/ib_logfile1lrwx------.1rootroot644月2309:3111->socket:[115703]lrwx------.1rootroot644月2309:3112->/tmp/ibLxLFBt(deleted)l-wx------.1rootroot644月2309:3113->/mydata/mysql-bin.000001lrwx------.1rootroot644月2309:3114->socket:[115704]lrwx------.1rootroot644月2309:3115->/mydata/mysql/host.MYI.......................

因此,我们可以通过使用ulimit -n来限制但进程所能打开的最大文件描述符数量,默认单进程打开的文件描述符为1024,就是代表单个进程只能同时最多只能维持1024甚至更少(因为有其它文件的句柄被打开)。如果开启4个进程维持用户链接,那么整个应用能够同时维持的连接数不会超过4*1024个,也就是说最多只能支持4×1024个用户在线。可以增大这个设置以便服务能够维持更多的TCP连接,从而达到限制socket创建的数量。

如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?通过lsof命令可以帮你查看:

$lsof-n|awk|sort|uniq-c|sort-nr|head-n21267015931831

上面说明了,7015进程打开了126个文件描述符,你可以通过ps命令看看7015这个进程是什么服务(这里都是以我的举例说明的,你在实验时要根据自己的进程进行查看,相信你有这个意识)。

修改单进程所能打开的最大文件数

1)ulimit -n 102400

这只是在当前终端有效,退出之后,open files又变为默认值。

2)将ulimit -n 102400写到/etc/profile中,这样每次登录终端时,都会自动执行/etc/profile。

3)令修改open files的数值永久生效,则必须修改配置文件:/etc/security/limits.conf在这个文件后加上:

*softnofile1024000*hardnofile1024000rootsoftnofile1024000roothardnofile1024000

如何查看linux php-fpm.pid位置

虽然不太明白你这个具体是指什么,要是需要命令的话,可以使用下面的:1. 启动php-fpm #/etc/init.d/php-fpm start2. 关闭php-fpm#/etc/init.d/php-fpm stop3. 要是使用php的命令的话,找到php路径一般是/usr/local/php/bin/php#/usr/local/php/bin/php 4. 暂时理解的是这样,你可以说的清楚些。

linux命令:从登录mysql数据库,到访问l数据库的所有表,然后锁定某一个表,显示表结构,再查询表内容。

service mysqld start(启动mysql服务)mysql(进入本地mysql数据库)show> rmmod b43 ssb ndiswrapper
modprobe ndiswrapper
modprobe ssb

这是几个跟内核模块加载有关的命令,常规的做法是修改/etc/或/etc/。 系统启动顺序里是先加载/etc/rc.d/然后在所以这个文件也可以。 如果模块与底层无关的话放在/etc/rc.d/也可以。 不需要写脚本直接放进去就OK 但这文件的格式不同.

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐