中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux下如何使用ulimit提高系統性能

發布時間:2022-01-29 08:39:11 來源:億速云 閱讀:169 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Linux下如何使用ulimit提高系統性能”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Linux下如何使用ulimit提高系統性能”這篇文章吧。

Linux對于每個用戶,系統限制其最大進程數。為提高性能,可以根據設備資源情況,設置各linux用戶的最大進程數,我們可以用ulimit來顯示當前的各種用戶進程限制,ulimit為shell內建命令,可用來控制shell執行程序的資源。

如何使用ulimit

ulimit通過一些參數選項來管理不同種類的系統資源。在本節,我們將講解這些參數的使用。

ulimit命令的格式為:

$ ulimit [options] [limit]
[options]

-H: 設置硬資源限制,一旦設置不能增加。如,ulimit -Hs 64;限制硬資源,線程棧大小為64K。

-S: 設置軟資源限制,設置后可以增加,但是不能超過硬資源設置。如,ulimit -Sn 32;限制軟資源,32個文件描述符。

-a: 顯示當前所有的limit信息。如,ulimit -a;顯示當前所有的limit信息。

-c: 最大的core文件的大小, 以blocks為單位。如,ulimit -c unlimited;對生成的core文件的大小不進行限制。

-d: 進程最大的數據段的大小,以Kbytes為單位。如,ulimit -d unlimited;對進程的數據段大小不進行限制。

-f: 進程可以創建文件的最大值,以 blocks 為單位。如,ulimit -f 2048;限制進程可以創建的最大文件大小為2048 blocks。

-l: 最大可加鎖內存大小,以Kbytes為單位。如,ulimit -l 32;限制最大可加鎖內存大小為32Kbytes。

-m: 最大內存大小,以Kbytes為單位。如,ulimit -m unlimited;對最大內存不進行限制。

-n: 可以打開最大文件描述符的數量。如,ulimit -n 128;限制最大可以使用128個文件描述符。

-p: 管道緩沖區的大小,以Kbytes為單位。如,ulimit -p 512;限制管道緩沖區的大小為512Kbytes。

-s: 線程棧大小,以Kbytes為單位。如,如,ulimit -s 512;限制線程棧的大小為512Kbytes。

-t: 最大的CPU占用時間,以秒為單位。 如,ulimit -t unlimited;對最大的CPU占用時間不進行限制。

-u: 用戶最大可用的進程數。如,ulimit -u 64;限制用戶最多可以使用64個進程。

-v: 進程最大可用的虛擬內存,如,以Kbytes為單位。如,ulimit -v 200000;限制最大可用的虛擬內存為200000Kbytes。

ulimit使用實例

用戶進程的有效范圍

ulimit 作為對資源使用限制的一種工作,是有其作用范圍的。那么,它限制的對象是單個用戶,單個進程,還是整個系統呢?事實上,ulimit 限制的是當前 shell 進程以及其派生的子進程。舉例來說,如果用戶同時運行了兩個 shell 終端進程,只在其中一個環境中執行了 ulimit -s 100,則該 shell 進程里創建文件的大小收到相應的限制,而同時另一個 shell 終端包括其上運行的子程序都不會受其影響。

Shell 1

$ ll -h newfile
-rw-r--r--. 1 root root 223K 4月  23 09:16 newfile
$ ulimit -f 100
$ cat newfile > shell1
File size limit exceeded (core dumped)
$ ll -h shell1
-rw-r--r--. 1 root root 100K 4月 23 09:20 shell1

Shell 2

$ cat newfile > shell2
$ ll -d shell2
-rw-r--r--. 1 root root 227690 4月  23 09:23 shell2
$ ll -h shell2
-rw-r--r--. 1 root root 223K 4月  23 09:23 shell2

那么,是否有針對某個具體用戶的資源加以限制的方法呢?答案是有的,臨時生效(不限制打開文件大小限制):

$ ulimit -f unlimited

或通過修改系統的/etc/security/limits.conf配置文件。該文件不僅能限制指定用戶的資源使用,還能限制指定組的資源使用。該文件的每一行都是對限定的一個描述,格式如下:

 

domain 表示用戶或者組的名字,還可以使用 * 作為通配符。Type 可以有兩個值,soft 和 hard。Item 則表示需要限定的資源,可以有很多候選值,如 stack,cpu,nofile 等等,分別表示最大的堆棧大小,占用的 cpu 時間,以及打開的文件數。通過添加對應的一行描述,則可以產生相應的限制。例如:

 * hard noflle 100

該行配置語句限定了任意用戶所能創建的最大文件數是 100。現在已經可以對進程和用戶分別做資源限制了,看似已經足夠了,其實不然。很多應用需要對整個系統的資源使用做一個總的限制,這時候我們需要修改/proc下的配置文件。/proc目錄下包含了很多系統當前狀態的參數,例如/proc/sys/kernel/pid_max,/proc/sys/net/ipv4/ip_local_port_range等等,從文件的名字大致可以猜出所限制的資源種類。由于該目錄下涉及的文件眾多,在此不一一介紹。有興趣的讀者可打開其中的相關文件查閱說明。

使用ulimit限制shell的內存使用

在這一小節里向讀者展示如何使用-d,-m 和-v 選項來對shell所使用的內存進行限制。首先我們來看一下不設置ulimit限制時調用ls命令的情況:

$ ll shell1 -l
-rw-r--r--. 1 root root 227690 4月  23 09:16 shell1

大家可以看到此時的 ls 命令運行正常。下面設置 ulimit:

$ ulimit -d 1000 -m 1000 -v 1000
這里再溫習一下前面章節里介紹過的這三個選項的含義:

-d:設置數據段的最大值。單位:KB。

-m:設置可以使用的常駐內存的最大值。單位:KB。

-v:設置虛擬內存的最大值。單位:KB。

通過上面的 ulimit 設置我們已經把當前 shell 所能使用的最大內存限制在 1000KB 以下。接下來我們看看這時運行 ls 命令會得到什么樣的結果:

$ ll shell1 -l
Segmentation fault (core dumped)
使用ulimit限制程序所能創建的socket數量

考慮一個現實中的實際需求。對于一個 C/S 模型中的 server 程序來說,它會為多個 client 程序請求創建多個 socket 端口給與響應。如果恰好有大量的 client 同時向 server 發出請求,那么此時 server 就會需要創建大量的 socket連接。但是在 Linux 下一切資源皆文件,普通文件是文件,磁盤打印機是文件,socket 當然也是文件。在 Linux 下創建一個新的socket 連接,實際上就是創建一個新的文件描述符。而Linux對單進程能打開的文件描述符是有限制的,默認單進程能打開的最大文件數量為1024,。ulimit 并沒有哪個選項直接說是用來限制socket的數量的。但是,我們有-n這個選項,它是用于限制一個進程所能打開的文件描述符的最大值。如下所示(查看某個進程當前打開的文件描述符信息):

$ ll /proc/36766/fd
總用量 0
lr-x------. 1 root root 64 4月  23 09:31 0 -> /dev/null
l-wx------. 1 root root 64 4月  23 09:31 1 -> /mydata/localhost.localdomain.err
lrwx------. 1 root root 64 4月  23 09:31 10 -> /mydata/ib_logfile1
lrwx------. 1 root root 64 4月  23 09:31 11 -> socket:[115703]
lrwx------. 1 root root 64 4月  23 09:31 12 -> /tmp/ibLxLFBt (deleted)
l-wx------. 1 root root 64 4月  23 09:31 13 -> /mydata/mysql-bin.000001
lrwx------. 1 root root 64 4月  23 09:31 14 -> socket:[115704]
lrwx------. 1 root root 64 4月  23 09:31 15 -> /mydata/mysql/host.MYI
.......................

因此,我們可以通過使用ulimit -n來限制但進程所能打開的最大文件描述符數量,默認單進程打開的文件描述符為1024,就是代表單個進程只能同時最多只能維持1024甚至更少(因為有其它文件的句柄被打開)。如果開啟4個進程維持用戶鏈接,那么整個應用能夠同時維持的連接數不會超過4*1024個,也就是說最多只能支持4×1024個用戶在線。可以增大這個設置以便服務能夠維持更多的TCP連接,從而達到限制socket創建的數量。

如果單個進程打開的文件句柄數量超過了系統定義的值,就會提到“too many files open”的錯誤提示。如何知道當前進程打開了多少個文件句柄呢?通過lsof命令可以幫你查看:

$ lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr| head -n 2
   126 7015
    93 1831

上面說明了,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在這個文件后加上:

* soft nofile 1024000
* hard nofile 1024000
root soft nofile 1024000
root hard nofile 1024000

以上是“Linux下如何使用ulimit提高系統性能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定安县| 潮州市| 侯马市| 洛扎县| 搜索| 共和县| 宁城县| 奉贤区| 彭泽县| 平罗县| 普格县| 随州市| 托克逊县| 团风县| 海淀区| 临沭县| 尚志市| 靖边县| 洪洞县| 荔波县| 奇台县| 双鸭山市| 北海市| 三原县| 宁武县| 浦江县| 天峨县| 铜梁县| 陇川县| 平凉市| 墨竹工卡县| 宝丰县| 张家港市| 昌邑市| 宜良县| 盈江县| 遵义市| 梧州市| 平顺县| 从江县| 石狮市|