日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

LINUX ulimit命令

發(fā)布時(shí)間:2025/3/21 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LINUX ulimit命令 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接

linux下默認(rèn)是不產(chǎn)生core文件的,要用ulimit -c unlimited放開(kāi)

概述

系統(tǒng)性能一直是一個(gè)受關(guān)注的話題,如何通過(guò)最簡(jiǎn)單的設(shè)置來(lái)實(shí)現(xiàn)最有效的性能調(diào)優(yōu),如何在有限資源的條件下保證程序的運(yùn)作,ulimit 是我們?cè)谔幚磉@些問(wèn)題時(shí),經(jīng)常使用的一種簡(jiǎn)單手段。ulimit 是一種 linux 系統(tǒng)的內(nèi)鍵功能,它具有一套參數(shù)集,用于為由它生成的 shell 進(jìn)程及其子進(jìn)程的資源使用設(shè)置限制。本文將在后面的章節(jié)中詳細(xì)說(shuō)明 ulimit 的功能,使用以及它的影響,并以具體的例子來(lái)詳細(xì)地闡述它在限制資源使用方面的影響。


ulimit 的功能和用法

ulimit 功能簡(jiǎn)述

假設(shè)有這樣一種情況,當(dāng)一臺(tái) Linux 主機(jī)上同時(shí)登陸了 10 個(gè)人,在系統(tǒng)資源無(wú)限制的情況下,這 10 個(gè)用戶同時(shí)打開(kāi)了 500 個(gè)文檔,而假設(shè)每個(gè)文檔的大小有 10M,這時(shí)系統(tǒng)的內(nèi)存資源就會(huì)受到巨大的挑戰(zhàn)。

而實(shí)際應(yīng)用的環(huán)境要比這種假設(shè)復(fù)雜的多,例如在一個(gè)嵌入式開(kāi)發(fā)環(huán)境中,各方面的資源都是非常緊缺的,對(duì)于開(kāi)啟文件描述符的數(shù)量,分配堆棧的大 小,CPU 時(shí)間,虛擬內(nèi)存大小,等等,都有非常嚴(yán)格的要求。資源的合理限制和分配,不僅僅是保證系統(tǒng)可用性的必要條件,也與系統(tǒng)上軟件運(yùn)行的性能有著密不可分的聯(lián) 系。這時(shí),ulimit 可以起到很大的作用,它是一種簡(jiǎn)單并且有效的實(shí)現(xiàn)資源限制的方式。

ulimit 用于限制 shell 啟動(dòng)進(jìn)程所占用的資源,支持以下各種類型的限制:所創(chuàng)建的內(nèi)核文件的大小、進(jìn)程數(shù)據(jù)塊的大小、Shell 進(jìn)程創(chuàng)建文件的大小、內(nèi)存鎖住的大小、常駐內(nèi)存集的大小、打開(kāi)文件描述符的數(shù)量、分配堆棧的最大大小、CPU 時(shí)間、單個(gè)用戶的最大線程數(shù)、Shell 進(jìn)程所能使用的最大虛擬內(nèi)存。同時(shí),它支持硬資源和軟資源的限制。

作為臨時(shí)限制,ulimit 可以作用于通過(guò)使用其命令登錄的 shell 會(huì)話,在會(huì)話終止時(shí)便結(jié)束限制,并不影響于其他 shell 會(huì)話。而對(duì)于長(zhǎng)期的固定限制,ulimit 命令語(yǔ)句又可以被添加到由登錄 shell 讀取的文件中,作用于特定的 shell 用戶。


圖 1. ulimit 的使用?

在下面的章節(jié)中,將詳細(xì)介紹如何使用 ulimit 做相應(yīng)的資源限制。

如何使用 ulimit

ulimit 通過(guò)一些參數(shù)選項(xiàng)來(lái)管理不同種類的系統(tǒng)資源。在本節(jié),我們將講解這些參數(shù)的使用。

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

具體的 options 含義以及簡(jiǎn)單示例可以參考以下表格。


表 1. ulimit 參數(shù)說(shuō)明

選項(xiàng) [options]含義例子
-H設(shè)置硬資源限制,一旦設(shè)置不能增加。ulimit – Hs 64;限制硬資源,線程棧大小為 64K。
-S設(shè)置軟資源限制,設(shè)置后可以增加,但是不能超過(guò)硬資源設(shè)置。ulimit – Sn 32;限制軟資源,32 個(gè)文件描述符。
-a顯示當(dāng)前所有的 limit 信息。ulimit – a;顯示當(dāng)前所有的 limit 信息。
-c最大的 core 文件的大小, 以 blocks 為單位。ulimit – c unlimited; 對(duì)生成的 core 文件的大小不進(jìn)行限制。
-d進(jìn)程最大的數(shù)據(jù)段的大小,以 Kbytes 為單位。ulimit -d unlimited;對(duì)進(jìn)程的數(shù)據(jù)段大小不進(jìn)行限制。
-f進(jìn)程可以創(chuàng)建文件的最大值,以 blocks 為單位。ulimit – f 2048;限制進(jìn)程可以創(chuàng)建的最大文件大小為 2048 blocks。
-l最大可加鎖內(nèi)存大小,以 Kbytes 為單位。ulimit – l 32;限制最大可加鎖內(nèi)存大小為 32 Kbytes。
-m最大內(nèi)存大小,以 Kbytes 為單位。ulimit – m unlimited;對(duì)最大內(nèi)存不進(jìn)行限制。
-n可以打開(kāi)最大文件描述符的數(shù)量。ulimit – n 128;限制最大可以使用 128 個(gè)文件描述符。
-p管道緩沖區(qū)的大小,以 Kbytes 為單位。ulimit – p 512;限制管道緩沖區(qū)的大小為 512 Kbytes。
-s線程棧大小,以 Kbytes 為單位。ulimit – s 512;限制線程棧的大小為 512 Kbytes。
-t最大的 CPU 占用時(shí)間,以秒為單位。ulimit – t unlimited;對(duì)最大的 CPU 占用時(shí)間不進(jìn)行限制。
-u用戶最大可用的進(jìn)程數(shù)。ulimit – u 64;限制用戶最多可以使用 64 個(gè)進(jìn)程。
-v進(jìn)程最大可用的虛擬內(nèi)存,以 Kbytes 為單位。ulimit – v 200000;限制最大可用的虛擬內(nèi)存為 200000 Kbytes。

?

我們可以通過(guò)以下幾種方式來(lái)使用 ulimit:

  • 在用戶的啟動(dòng)腳本中

    如果用戶使用的是 bash,就可以在用戶的目錄下的 .bashrc 文件中,加入 ulimit – u 64,來(lái)限制用戶最多可以使用 64 個(gè)進(jìn)程。此外,可以在與 .bashrc 功能相當(dāng)?shù)膯?dòng)腳本中加入 ulimt。

  • 在應(yīng)用程序的啟動(dòng)腳本中

    如果用戶要對(duì)某個(gè)應(yīng)用程序 myapp 進(jìn)行限制,可以寫一個(gè)簡(jiǎn)單的腳本 startmyapp。

    ulimit – s 512 myapp

    以后只要通過(guò)腳本 startmyapp 來(lái)啟動(dòng)應(yīng)用程序,就可以限制應(yīng)用程序 myapp 的線程棧大小為 512K。

  • 直接在控制臺(tái)輸入
    user@tc511-ui:~>ulimit – p 256

    限制管道的緩沖區(qū)為 256K。


用戶進(jìn)程的有效范圍

ulimit 作為對(duì)資源使用限制的一種工作,是有其作用范圍的。那么,它限制的對(duì)象是單個(gè)用戶,單個(gè)進(jìn)程,還是整個(gè)系統(tǒng)呢?事實(shí)上,ulimit 限制的是當(dāng)前 shell 進(jìn)程以及其派生的子進(jìn)程。舉例來(lái)說(shuō),如果用戶同時(shí)運(yùn)行了兩個(gè) shell 終端進(jìn)程,只在其中一個(gè)環(huán)境中執(zhí)行了 ulimit – s 100,則該 shell 進(jìn)程里創(chuàng)建文件的大小收到相應(yīng)的限制,而同時(shí)另一個(gè) shell 終端包括其上運(yùn)行的子程序都不會(huì)受其影響:


Shell 進(jìn)程 1

ulimit – s 100 cat testFile > newFile File size limit exceeded



Shell 進(jìn)程 2

cat testFile > newFile ls – s newFile 323669 newFile

?

那么,是否有針對(duì)某個(gè)具體用戶的資源加以限制的方法呢?答案是有的,方法是通過(guò)修改系統(tǒng)的 /etc/security/limits 配置文件。該文件不僅能限制指定用戶的資源使用,還能限制指定組的資源使用。該文件的每一行都是對(duì)限定的一個(gè)描述,格式如下:

<domain> <type> <item> <value>

?

domain 表示用戶或者組的名字,還可以使用 * 作為通配符。Type 可以有兩個(gè)值,soft 和 hard。Item 則表示需要限定的資源,可以有很多候選值,如 stack,cpu,nofile 等等,分別表示最大的堆棧大小,占用的 cpu 時(shí)間,以及打開(kāi)的文件數(shù)。通過(guò)添加對(duì)應(yīng)的一行描述,則可以產(chǎn)生相應(yīng)的限制。例如:

* hard noflle 100

?

該行配置語(yǔ)句限定了任意用戶所能創(chuàng)建的最大文件數(shù)是 100。

現(xiàn)在已經(jīng)可以對(duì)進(jìn)程和用戶分別做資源限制了,看似已經(jīng)足夠了,其實(shí)不然。很多應(yīng)用需要對(duì)整個(gè)系統(tǒng)的資源使用做一個(gè)總的限制,這時(shí)候我們需要修改 /proc 下的配置文件。/proc 目錄下包含了很多系統(tǒng)當(dāng)前狀態(tài)的參數(shù),例如 /proc/sys/kernel/pid_max,/proc/sys/net/ipv4/ip_local_port_range 等等,從文件的名字大致可以猜出所限制的資源種類。由于該目錄下涉及的文件眾多,在此不一一介紹。有興趣的讀者可打開(kāi)其中的相關(guān)文件查閱說(shuō)明。


ulimit 管理系統(tǒng)資源的例子

ulimit 提供了在 shell 進(jìn)程中限制系統(tǒng)資源的功能。本章列舉了一些使用 ulimit 對(duì)用戶進(jìn)程進(jìn)行限制的例子,詳述了這些限制行為以及對(duì)應(yīng)的影響,以此來(lái)說(shuō)明 ulimit 如何對(duì)系統(tǒng)資源進(jìn)行限制,從而達(dá)到調(diào)節(jié)系統(tǒng)性能的功能。

使用 ulimit 限制 shell 的內(nèi)存使用

在這一小節(jié)里向讀者展示如何使用 – d,– m 和 – v 選項(xiàng)來(lái)對(duì) shell 所使用的內(nèi)存進(jìn)行限制。

首先我們來(lái)看一下不設(shè)置 ulimit 限制時(shí)調(diào)用 ls 命令的情況:


圖 2. 未設(shè)置 ulimit 時(shí) ls 命令使用情況?

大家可以看到此時(shí)的 ls 命令運(yùn)行正常。下面設(shè)置 ulimit:

> ulimit -d 1000 -m 1000 -v 1000

?

這里再溫習(xí)一下前面章節(jié)里介紹過(guò)的這三個(gè)選項(xiàng)的含義:

-d:設(shè)置數(shù)據(jù)段的最大值。單位:KB。

-m:設(shè)置可以使用的常駐內(nèi)存的最大值。單位:KB。

-v:設(shè)置虛擬內(nèi)存的最大值。單位:KB。

通過(guò)上面的 ulimit 設(shè)置我們已經(jīng)把當(dāng)前 shell 所能使用的最大內(nèi)存限制在 1000KB 以下。接下來(lái)我們看看這時(shí)運(yùn)行 ls 命令會(huì)得到什么樣的結(jié)果:

haohe@sles10-hehao:~/code/ulimit> ls test -l /bin/ls: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory

?

從上面的結(jié)果可以看到,此時(shí) ls 運(yùn)行失敗。根據(jù)系統(tǒng)給出的錯(cuò)誤信息我們可以看出是由于調(diào)用 libc 庫(kù)時(shí)內(nèi)存分配失敗而導(dǎo)致的 ls 出錯(cuò)。那么我們來(lái)看一下這個(gè) libc 庫(kù)文件到底有多大:


圖 3. 查看 libc 文件大小?

從上面的信息可以看出,這個(gè) libc 庫(kù)文件的大小是 1.5MB。而我們用 ulimit 所設(shè)置的內(nèi)存使用上限是 1000KB,小于 1.5MB,這也就充分證明了 ulimit 所起到的限制 shell 內(nèi)存使用的功能。

使用 ulimit 限制 shell 創(chuàng)建的文件的大小

接下來(lái)向讀者展示如何使用 -f 選項(xiàng)來(lái)對(duì) shell 所能創(chuàng)建的文件大小進(jìn)行限制。

首先我們來(lái)看一下,沒(méi)有設(shè)置 ulimit -f 時(shí)的情況:


圖 4. 查看文件?

現(xiàn)有一個(gè)文件 testFile 大小為 323669 bytes,現(xiàn)在使用 cat 命令來(lái)創(chuàng)建一個(gè) testFile 的 copy:


圖 5. 未設(shè)置 ulimit 時(shí)創(chuàng)建復(fù)本?

從上面的輸出可以看出,我們成功的創(chuàng)建了 testFile 的拷貝 newFile。

下面我們?cè)O(shè)置 ulimt – f 100:

> ulimit -f 100

-f 選項(xiàng)的含義是:用來(lái)設(shè)置 shell 可以創(chuàng)建的文件的最大值。單位是 blocks。

現(xiàn)在我們?cè)賮?lái)執(zhí)行一次相同的拷貝命令看看會(huì)是什么結(jié)果:


圖 6. 設(shè)置 ulimit 時(shí)創(chuàng)建復(fù)本?

這次創(chuàng)建 testFile 的拷貝失敗了,系統(tǒng)給出的出錯(cuò)信息時(shí)文件大小超出了限制。在 Linux 系統(tǒng)下一個(gè) block 的默認(rèn)大小是 512 bytes。所以上面的 ulimit 的含義就是限制 shell 所能創(chuàng)建的文件最大值為 512 x 100 = 51200 bytes,小于 323669 bytes,所以創(chuàng)建文件失敗,符合我們的期望。這個(gè)例子說(shuō)明了如何使用 ulimit 來(lái)控制 shell 所能創(chuàng)建的最大文件。

使用 ulimit 限制程序所能創(chuàng)建的 socket 數(shù)量

考慮一個(gè)現(xiàn)實(shí)中的實(shí)際需求。對(duì)于一個(gè) C/S 模型中的 server 程序來(lái)說(shuō),它會(huì)為多個(gè) client 程序請(qǐng)求創(chuàng)建多個(gè) socket 端口給與響應(yīng)。如果恰好有大量的 client 同時(shí)向 server 發(fā)出請(qǐng)求,那么此時(shí) server 就會(huì)需要?jiǎng)?chuàng)建大量的 socket 連接。但在一個(gè)系統(tǒng)當(dāng)中,往往需要限制單個(gè) server 程序所能使用的最大 socket 數(shù),以供其他的 server 程序所使用。那么我們?nèi)绾蝸?lái)做到這一點(diǎn)呢?答案是我們可以通過(guò) ulimit 來(lái)實(shí)現(xiàn)!細(xì)心的讀者可能會(huì)發(fā)現(xiàn),通過(guò)前面章節(jié)的介紹似乎沒(méi)有限制 socket 使用的 ulimit 選項(xiàng)。是的,ulimit 并沒(méi)有哪個(gè)選項(xiàng)直接說(shuō)是用來(lái)限制 socket 的數(shù)量的。但是,我們有 -n 這個(gè)選項(xiàng),它是用于限制一個(gè)進(jìn)程所能打開(kāi)的文件描述符的最大值。在 Linux 下一切資源皆文件,普通文件是文件,磁盤打印機(jī)是文件,socket 當(dāng)然也是文件。在 Linux 下創(chuàng)建一個(gè)新的 socket 連接,實(shí)際上就是創(chuàng)建一個(gè)新的文件描述符。如下圖所示(查看某個(gè)進(jìn)程當(dāng)前打開(kāi)的文件描述符信息):


圖 7. 查看進(jìn)程打開(kāi)文件描述符?

因此,我們可以通過(guò)使用 ulimit – n 來(lái)限制程序所能打開(kāi)的最大文件描述符數(shù)量,從而達(dá)到限制 socket 創(chuàng)建的數(shù)量。

使用 ulimit 限制 shell 多線程程序堆棧的大小(增加可用線程數(shù)量)

在最后一個(gè)例子中,向大家介紹如何使用 -s(單位 KB)來(lái)對(duì)線程的堆棧大小進(jìn)行限制,從而減少整個(gè)多線程程序的內(nèi)存使用,增加可用線程的數(shù)量。這個(gè)例子取自于一個(gè)真實(shí)的案例。我們所遇到的問(wèn)題是系統(tǒng)對(duì)我們的多線程程序有如下的限制:

ulimit -v 200000

根據(jù)本文前面的介紹,這意味著我們的程序最多只能使用不到 200MB 的虛擬內(nèi)存。由于我們的程序是一個(gè)多線程程序,程序在運(yùn)行時(shí)會(huì)根據(jù)需要?jiǎng)?chuàng)建新的線程,這勢(shì)必會(huì)增加總的內(nèi)存需求量。一開(kāi)始我們對(duì)堆棧大小的限制是 1024 (本例子中使用 1232 來(lái)說(shuō)明):

# ulimit – s 1232

?

當(dāng)我們的程序啟動(dòng)后,通過(guò) pmap 來(lái)查看其內(nèi)存使用情況,可以看到多個(gè)占用 1232KB 的數(shù)據(jù)段,這些就是程序所創(chuàng)建的線程所使用的堆棧:


圖 8. 程序線程所使用的堆棧?

每當(dāng)一個(gè)新的線程被創(chuàng)建時(shí)都需要新分配一段大小為 1232KB 的內(nèi)存空間,而我們總的虛擬內(nèi)存限制是 200MB,所以如果我們需要?jiǎng)?chuàng)建更多的線程,那么一個(gè)可以改進(jìn)的方法就是減少每個(gè)線程的固定堆棧大小,這可以通過(guò) ulimit – s 來(lái)實(shí)現(xiàn):

# ulimit -s 512

?

我們將堆棧大小設(shè)置為 512KB,這時(shí)再通過(guò) pmap 查看一下我們的設(shè)置是否起作用:


圖 9. 設(shè)置 ulimit 后堆棧大小?

從上面的信息可以看出,我們已經(jīng)成功的將線程的堆棧大小改為 512KB 了,這樣在總內(nèi)存使用限制不變的情況下,我們可以通過(guò)本小節(jié)介紹的方法來(lái)增加可以創(chuàng)建的線程數(shù),從而達(dá)到改善程序的多線程性能。


總結(jié)

綜上所述,linux 系統(tǒng)中的 ulimit 指令,對(duì)資源限制和系統(tǒng)性能優(yōu)化提供了一條便捷的途徑。從用戶的 shell 啟動(dòng)腳本,應(yīng)用程序啟動(dòng)腳本,以及直接在控制臺(tái),都可以通過(guò)該指令限制系統(tǒng)資源的使用,包括所創(chuàng)建的內(nèi)核文件的大小、進(jìn)程數(shù)據(jù)塊的大小、Shell 進(jìn)程創(chuàng)建文件的大小、內(nèi)存鎖住的大小、常駐內(nèi)存集的大小、打開(kāi)文件描述符的數(shù)量、分配堆棧的最大大小、CPU 時(shí)間、單個(gè)用戶的最大線程數(shù)、Shell 進(jìn)程所能使用的最大虛擬內(nèi)存,等等方面。本文中的示例非常直觀的說(shuō)明了 ulimit 的使用及其產(chǎn)生的效果,顯而易見(jiàn),ulimit 對(duì)我們?cè)?Linux 平臺(tái)的應(yīng)用和開(kāi)發(fā)工作是非常實(shí)用的

總結(jié)

以上是生活随笔為你收集整理的LINUX ulimit命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线视频一区 | 色视频综合| 日本视频精品 | 国产精品久久久久久99 | 久久五月网 | 黄色美女片 | 激情宗合 | 三级男人添奶爽爽爽视频 | 日本女人毛片 | 一级黄色片视频 | www激情| 精品人妻无码一区二区三区 | 18一20岁毛毛片 | 亚洲欧美偷拍视频 | 欧美啪啪一区 | 男生插女生视频 | 日本大奶子视频 | 农村黄色片 | 国产欧美一区二区三区精华液好吗 | 久久精品国产亚洲av久一一区 | 成人一二三四区 | 久久另类ts人妖一区二区 | 成人午夜视频精品一区 | 一本到av | 成人在线视频一区 | 欧美日韩亚洲精品一区二区 | 国产高清一二三区 | 给我看高清的视频在线观看 | 美女无遮挡免费网站 | 激情小说亚洲色图 | 快色在线观看 | 黄色网络在线观看 | 国产精品第13页 | 亚洲欧美精品午睡沙发 | 欧美日韩激情视频 | 日本免费网站在线观看 | 秋霞午夜鲁丝一区二区老狼 | 欧美成人片在线 | 一区二区三区四区中文字幕 | 国产xxxx18 | 爱如潮水3免费观看日本高清 | 在线sese | 最新理伦片eeuss影院 | 天天干狠狠插 | 天天色天天操天天 | 亲子乱子伦xxxx | 日本电影一区 | np视频 | 夜夜爽影院 | 91粉色视频| 欧美七区 | 亚洲日本天堂 | jizz色| 欧美日韩视频 | 国产911视频 | 日韩爱爱视频 | 日本中文字幕在线视频 | 日韩av手机在线 | 99国产精品自拍 | 日韩一级片免费在线观看 | 999色综合| 91在线欧美 | 人禽l交视频在线播放 视频 | 精品一区二区在线看 | av在线收看 | 精品乱子伦一区二区 | 一区二区三区四区国产 | 五月婷婷在线观看视频 | 逼特逼在线视频 | 国产精品99久久久久久人 | www视频在线观看网站 | 懂爱av | 一区二区在线免费观看视频 | 欧美一区二区最爽乱淫视频免费看 | 欧美肉大捧一进一出免费视频 | 国产一区在线播放 | 午夜久久久久久 | 毛片毛片毛片毛片毛片 | 日韩精品在线免费视频 | 欧美一区二区黄片 | 超碰98在线观看 | 久久美女免费视频 | 19禁大尺度做爰无遮挡电影 | 青草福利视频 | 亚洲视频高清 | 免费看亚洲 | 神马午夜888 | 免费福利小视频 | 国产精品二三区 | 成人少妇影院yyyy | 波多野42部无码喷潮 | 男人懂得网站 | 久久免费国产视频 | 国产综合激情 | 88xx成人永久免费观看 | 男女插插网站 | 日日摸夜夜添夜夜 | 很黄很污的视频网站 | 狠狠精品干练久久久无码中文字幕 |