ulimit 命令簡介和使用及簡單優化

1. 簡介

ulimit 用於限制 shell 啓動進程所佔用的資源,支持以下各種類型的限制:所創建的內核文件的大

小、進程數據塊的大小、Shell 進程創建文件的大小、內存鎖住的大小、常駐內存集的大小、打開

文件描述符的數量、分配堆棧的最大大小、CPU 時間、單個用戶的最大線程數、Shell 進程所能使

用的最大虛擬內存。同時,它支持硬資源和軟資源的限制。

作爲臨時限制,ulimit 可以作用於通過使用其命令登錄的 shell 會話,在會話終止時便結束限制,並

不影響於其他 shell 會話。而對於長期的固定限制,ulimit 命令語句又可以被添加到由登錄 shell 讀

取的文件中,作用於特定的 shell 用戶。

 

2. ulimit 通過一些參數選項來管理不同種類的系統資源

ulimit 命令的格式爲:ulimit [options] [limit]

具體的 options 含義以及簡單示例可以參考以下

ulimit 參數說明

選項 [options]
含義
例子

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

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

說明:ulimit 命令本身就有分軟硬設置,加-H 就是硬,加-S 就是軟默認顯示的是軟限制,soft 限制指的是當前系統生效的設置值。 hard 限制值可以被普通用戶降低。但是不能增加。 soft 限制不能設置的比 hard 限制更高。 只有 root 用戶才能夠增加 hard 限制值。
 

-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;限制最大可加鎖內存大小爲 32 Kbytes。

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

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

-p
管道緩衝區的大小,以 Kbytes 爲單位。
ulimit – p 512;限制管道緩衝區的大小爲 512 Kbytes。

-s
線程棧大小,以 Kbytes 爲單位。
ulimit – s 512;限制線程棧的大小爲 512 Kbytes。

-t
最大的 CPU 佔用時間,以秒爲單位。
ulimit – t unlimited;對最大的 CPU 佔用時間不進行限制。

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

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

我們可以通過以下幾種方式來使用 ulimit:

  • 在用戶的啓動腳本中

    如果用戶使用的是 bash,就可以在用戶的目錄下的 .bashrc 文件中,加入 ulimit – u 64,
    來限制用戶最多可以使用 64 個進程。此外,可以在與 .bashrc 功能相當的啓動腳本中加入 ulimt。

  • 在應用程序的啓動腳本中

    如果用戶要對某個應用程序 app 進行限制,可以寫一個簡單的腳本 startapp

 

  • 用戶進程的有效範圍

ulimit 作爲對資源使用限制的一種工作,是有其作用範圍的。那麼,它限制的對象是單個用戶,單個

進程,還是整個系統呢?事實上,ulimit 限制的是當前 shell 進程以及其派生的子進程。舉例來說,

如果用戶同時運行了兩個 shell 終端進程,只在其中一個環境中執行了 ulimit – s 100,則該 shell 

進程裏創建文件的大小收到相應的限制,而同時另一個 shell 終端包括其上運行的子程序都不會受其影響。

3. 簡單優化

在/etc/security/limits.conf 最後增加:
* soft nofile 65535
* hard nofile 65535

總結

綜上所述,linux 系統中的 ulimit 指令,對資源限制和系統性能優化提供了一條便捷的途徑。
從用戶的 shell 啓動腳本,應用程序啓動腳本,以及直接在控制檯,都可以通過該指令限制系統資
源的使用,包括所創建的內核文件的大小、進程數據塊的大小、Shell 進程創建文件的大小、內存鎖
住的大小、常駐內存集的大小、打開文件描述符的數量、分配堆棧的最大大小、CPU 時間、單個用戶
的最大線程數、Shell 進程所能使用的最大虛擬內存,等等方面。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章