![通過 ulimit 改善系統(tǒng)性能_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/1ef1118d-2aa9-40ea-95ce-a61aecb1878c/1ef1118d-2aa9-40ea-95ce-a61aecb1878c1.gif)
![通過 ulimit 改善系統(tǒng)性能_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/1ef1118d-2aa9-40ea-95ce-a61aecb1878c/1ef1118d-2aa9-40ea-95ce-a61aecb1878c2.gif)
![通過 ulimit 改善系統(tǒng)性能_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/1ef1118d-2aa9-40ea-95ce-a61aecb1878c/1ef1118d-2aa9-40ea-95ce-a61aecb1878c3.gif)
![通過 ulimit 改善系統(tǒng)性能_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/1ef1118d-2aa9-40ea-95ce-a61aecb1878c/1ef1118d-2aa9-40ea-95ce-a61aecb1878c4.gif)
![通過 ulimit 改善系統(tǒng)性能_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/21/1ef1118d-2aa9-40ea-95ce-a61aecb1878c/1ef1118d-2aa9-40ea-95ce-a61aecb1878c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、通過 ulimit 改善系統(tǒng)性能概述系統(tǒng)性能一直是一個(gè)受關(guān)注的話題,如何通過最簡單的設(shè)置來實(shí)現(xiàn)最有效的性能調(diào)優(yōu),如何在有限資源的條件下保證程序的運(yùn)作,ulimit 是我們?cè)谔幚磉@些問題時(shí),經(jīng)常使用的一種簡單手段。ulimit 是一種 linux 系統(tǒng)的內(nèi)鍵功能,它具有一套參數(shù)集,用于為由它生成的 shell 進(jìn)程及其子進(jìn)程的資源使用設(shè)置限制。本文將在后面的章節(jié)中詳細(xì)說明 ulimit 的功能,使用以及它的影響,并以具體的例子來詳細(xì)地闡述它在限制資源使用方面的影響。ulimit 的功能和用法ulimit 功能簡述假設(shè)有這樣一種情況,當(dāng)一臺(tái) Linux 主機(jī)上同時(shí)登陸了 10 個(gè)人,在系統(tǒng)資源無限
2、制的情況下,這 10 個(gè)用戶同時(shí)打開了 500 個(gè)文檔,而假設(shè)每個(gè)文檔的大小有 10M,這時(shí)系統(tǒng)的內(nèi)存資源就會(huì)受到巨大的挑戰(zhàn)。而實(shí)際應(yīng)用的環(huán)境要比這種假設(shè)復(fù)雜的多,例如在一個(gè)嵌入式開發(fā)環(huán)境中,各方面的資源都是非常緊缺的,對(duì)于開啟文件描述符的數(shù)量,分配堆棧的大小,CPU 時(shí)間,虛擬內(nèi)存大小,等等,都有非常嚴(yán)格的要求。資源的合理限制和分配,不僅僅是保證系統(tǒng)可用性的必要條件,也與系統(tǒng)上軟件運(yùn)行的性能有著密不可分的聯(lián)系。這時(shí),ulimit 可以起到很大的作用,它是一種簡單并且有效的實(shí)現(xiàn)資源限制的方式。ulimit 用于限制 shell 啟動(dòng)進(jìn)程所占用的資源,支持以下各種類型的限制:所創(chuàng)建的內(nèi)核文件的大
3、小、進(jìn)程數(shù)據(jù)塊的大小、Shell 進(jìn)程創(chuàng)建文件的大小、內(nèi)存鎖住的大小、常駐內(nèi)存集的大小、打開文件描述符的數(shù)量、分配堆棧的最大大小、CPU 時(shí)間、單個(gè)用戶的最大線程數(shù)、Shell 進(jìn)程所能使用的最大虛擬內(nèi)存。同時(shí),它支持硬資源和軟資源的限制。作為臨時(shí)限制,ulimit 可以作用于通過使用其命令登錄的 shell 會(huì)話,在會(huì)話終止時(shí)便結(jié)束限制,并不影響于其他 shell 會(huì)話。而對(duì)于長期的固定限制,ulimit 命令語句又可以被添加到由登錄 shell 讀取的文件中,作用于特定的 shell 用戶。圖 1. ulimit 的使用 在下面的章節(jié)中,將詳細(xì)介紹如何使用 ulimit 做相應(yīng)的資源限制。
4、如何使用 ulimitulimit 通過一些參數(shù)選項(xiàng)來管理不同種類的系統(tǒng)資源。在本節(jié),我們將講解這些參數(shù)的使用。ulimit 命令的格式為:ulimit options limit具體的 options 含義以及簡單示例可以參考以下表格。表 1. ulimit 參數(shù)說明選項(xiàng) options 含義 例子 -H 設(shè)置硬資源限制,一旦設(shè)置不能增加。 ulimit Hs 64;限制硬資源,線程棧大小為 64K。 -S 設(shè)置軟資源限制,設(shè)置后可以增加,但是不能超過硬資源設(shè)置。 ulimit Sn 32;限制軟資源,32 個(gè)文件描述符。 -a 顯示當(dāng)前所有的 limit 信息。 ulimit a;顯示當(dāng)前
5、所有的 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)存大小
6、,以 Kbytes 為單位。 ulimit m unlimited;對(duì)最大內(nèi)存不進(jìn)行限制。 -n 可以打開最大文件描述符的數(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ù)。 uli
7、mit u 64;限制用戶最多可以使用 64 個(gè)進(jìn)程。 -v 進(jìn)程最大可用的虛擬內(nèi)存,以 Kbytes 為單位。 ulimit v 200000;限制最大可用的虛擬內(nèi)存為 200000 Kbytes。 我們可以通過以下幾種方式來使用 ulimit:在用戶的啟動(dòng)腳本中 如果用戶使用的是 bash,就可以在用戶的目錄下的 .bashrc 文件中,加入 ulimit u 64,來限制用戶最多可以使用 64 個(gè)進(jìn)程。此外,可以在與 .bashrc 功能相當(dāng)?shù)膯?dòng)腳本中加入 ulimt。在應(yīng)用程序的啟動(dòng)腳本中 如果用戶要對(duì)某個(gè)應(yīng)用程序 myapp 進(jìn)行限制,可以寫一個(gè)簡單的腳本 startmyapp。
8、ulimit s 512 myapp 以后只要通過腳本 startmyapp 來啟動(dòng)應(yīng)用程序,就可以限制應(yīng)用程序 myapp 的線程棧大小為 512K。直接在控制臺(tái)輸入 usertc511-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)程。舉例來說,如果用戶同時(shí)運(yùn)行了兩個(gè) shell 終端進(jìn)程,只在其中一個(gè)環(huán)境中執(zhí)行了 ulimit s 100,則該 shell 進(jìn)程里
9、創(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è)具體用戶的資源加以限制的方法呢?答案是有的,方法是通過修改系統(tǒng)的 /etc/security/limits 配置文件。該文件不僅能限制指定用戶的資源使用,還能限制指定組的資源使用。該文件的每一行都是對(duì)限定的一個(gè)描述,格式如下
10、: domain 表示用戶或者組的名字,還可以使用 * 作為通配符。Type 可以有兩個(gè)值,soft 和 hard。Item 則表示需要限定的資源,可以有很多候選值,如 stack,cpu,nofile 等等,分別表示最大的堆棧大小,占用的 cpu 時(shí)間,以及打開的文件數(shù)。通過添加對(duì)應(yīng)的一行描述,則可以產(chǎn)生相應(yīng)的限制。例如: * hard noflle 100 該行配置語句限定了任意用戶所能創(chuàng)建的最大文件數(shù)是 100?,F(xiàn)在已經(jīng)可以對(duì)進(jìn)程和用戶分別做資源限制了,看似已經(jīng)足夠了,其實(shí)不然。很多應(yīng)用需要對(duì)整個(gè)系統(tǒng)的資源使用做一個(gè)總的限制,這時(shí)候我們需要修改 /proc 下的配置文件。/proc 目錄
11、下包含了很多系統(tǒng)當(dāng)前狀態(tài)的參數(shù),例如 /proc/sys/kernel/pid_max,/proc/sys/net/ipv4/ip_local_port_range 等等,從文件的名字大致可以猜出所限制的資源種類。由于該目錄下涉及的文件眾多,在此不一一介紹。有興趣的讀者可打開其中的相關(guān)文件查閱說明。-回頁首u(yù)limit 管理系統(tǒng)資源的例子ulimit 提供了在 shell 進(jìn)程中限制系統(tǒng)資源的功能。本章列舉了一些使用 ulimit 對(duì)用戶進(jìn)程進(jìn)行限制的例子,詳述了這些限制行為以及對(duì)應(yīng)的影響,以此來說明 ulimit 如何對(duì)系統(tǒng)資源進(jìn)行限制,從而達(dá)到調(diào)節(jié)系統(tǒng)性能的功能。使用 ulimit 限制
12、shell 的內(nèi)存使用在這一小節(jié)里向讀者展示如何使用 d, m 和 v 選項(xiàng)來對(duì) shell 所使用的內(nèi)存進(jìn)行限制。首先我們來看一下不設(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é)里介紹過的這三個(gè)選項(xiàng)的含義:-d:設(shè)置數(shù)據(jù)段的最大值。單位:KB。-m:設(shè)置可以使用的常駐內(nèi)存的最大值。單位:KB。-v:設(shè)置虛擬內(nèi)存的最大值。單位:KB。通過上面的 ulimit 設(shè)置我們已經(jīng)把當(dāng)前 shel
13、l 所能使用的最大內(nèi)存限制在 1000KB 以下。接下來我們看看這時(shí)運(yùn)行 ls 命令會(huì)得到什么樣的結(jié)果: haohesles10-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 庫時(shí)內(nèi)存分配失敗而導(dǎo)致的 ls 出錯(cuò)。那么我們來看一下這個(gè) li
14、bc 庫文件到底有多大:圖 3. 查看 libc 文件大小 從上面的信息可以看出,這個(gè) libc 庫文件的大小是 1.5MB。而我們用 ulimit 所設(shè)置的內(nèi)存使用上限是 1000KB,小于 1.5MB,這也就充分證明了 ulimit 所起到的限制 shell 內(nèi)存使用的功能。使用 ulimit 限制 shell 創(chuàng)建的文件的大小接下來向讀者展示如何使用 -f 選項(xiàng)來對(duì) shell 所能創(chuàng)建的文件大小進(jìn)行限制。首先我們來看一下,沒有設(shè)置 ulimit -f 時(shí)的情況:圖 4. 查看文件 現(xiàn)有一個(gè)文件 testFile 大小為 323669 bytes,現(xiàn)在使用 cat 命令來創(chuàng)建一個(gè) tes
15、tFile 的 copy:圖 5. 未設(shè)置 ulimit 時(shí)創(chuàng)建復(fù)本 從上面的輸出可以看出,我們成功的創(chuàng)建了 testFile 的拷貝 newFile。下面我們?cè)O(shè)置 ulimt f 100: ulimit -f 100 -f 選項(xiàng)的含義是:用來設(shè)置 shell 可以創(chuàng)建的文件的最大值。單位是 blocks?,F(xiàn)在我們?cè)賮韴?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 的含義就是限制
16、shell 所能創(chuàng)建的文件最大值為 512 x 100 = 51200 bytes,小于 323669 bytes,所以創(chuàng)建文件失敗,符合我們的期望。這個(gè)例子說明了如何使用 ulimit 來控制 shell 所能創(chuàng)建的最大文件。使用 ulimit 限制程序所能創(chuàng)建的 socket 數(shù)量考慮一個(gè)現(xiàn)實(shí)中的實(shí)際需求。對(duì)于一個(gè) C/S 模型中的 server 程序來說,它會(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è)
17、server 程序所能使用的最大 socket 數(shù),以供其他的 server 程序所使用。那么我們?nèi)绾蝸碜龅竭@一點(diǎn)呢?答案是我們可以通過 ulimit 來實(shí)現(xiàn)!細(xì)心的讀者可能會(huì)發(fā)現(xiàn),通過前面章節(jié)的介紹似乎沒有限制 socket 使用的 ulimit 選項(xiàng)。是的,ulimit 并沒有哪個(gè)選項(xiàng)直接說是用來限制 socket 的數(shù)量的。但是,我們有 -n 這個(gè)選項(xiàng),它是用于限制一個(gè)進(jìn)程所能打開的文件描述符的最大值。在 Linux 下一切資源皆文件,普通文件是文件,磁盤打印機(jī)是文件,socket 當(dāng)然也是文件。在 Linux 下創(chuàng)建一個(gè)新的 socket 連接,實(shí)際上就是創(chuàng)建一個(gè)新的文件描述符。如下圖
18、所示(查看某個(gè)進(jìn)程當(dāng)前打開的文件描述符信息):圖 7. 查看進(jìn)程打開文件描述符 因此,我們可以通過使用 ulimit n 來限制程序所能打開的最大文件描述符數(shù)量,從而達(dá)到限制 socket 創(chuàng)建的數(shù)量。使用 ulimit 限制 shell 多線程程序堆棧的大?。ㄔ黾涌捎镁€程數(shù)量)在最后一個(gè)例子中,向大家介紹如何使用 -s(單位 KB)來對(duì)線程的堆棧大小進(jìn)行限制,從而減少整個(gè)多線程程序的內(nèi)存使用,增加可用線程的數(shù)量。這個(gè)例子取自于一個(gè)真實(shí)的案例。我們所遇到的問題是系統(tǒng)對(duì)我們的多線程程序有如下的限制:ulimit -v 200000根據(jù)本文前面的介紹,這意味著我們的程序最多只能使用不到 200MB 的虛擬內(nèi)存。由于我們的程序是一個(gè)多線程程序,程序在運(yùn)行時(shí)會(huì)根據(jù)需要?jiǎng)?chuàng)建新的線程,這勢必會(huì)增加總的內(nèi)存需求量。一開始我們對(duì)堆棧大小的限制是 1024 (本例子中使用 1232 來說明): # ulimit s 1232 當(dāng)我們的程序啟動(dòng)后,通過 pmap 來查看其內(nèi)存使用情況,可以看到多個(gè)占用 1232KB 的數(shù)據(jù)段,這些就是程序所創(chuàng)建的線
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球風(fēng)電用工業(yè)碳刷行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025-2030全球服裝金屬探測器行業(yè)調(diào)研及趨勢分析報(bào)告
- 2025年全球及中國高性能航空涂料行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025年全球及中國眼科手術(shù)剪行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報(bào)告
- 2025公路工程進(jìn)度、計(jì)量、合同管理監(jiān)理內(nèi)容
- 餐桌茶幾家具買賣合同
- 年貨物運(yùn)輸合同范本
- 2025合同模板合伙協(xié)議范本
- 大米購銷的合同
- 物聯(lián)網(wǎng)系統(tǒng)定制與開發(fā)合同
- 浙江省杭州市2024-2025學(xué)年高三上學(xué)期一模英語試題(含解析無聽力原文及音頻)
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 精裝修樣板房房屋使用說明
- 喬遷新居結(jié)婚典禮主持詞
- 小學(xué)四年級(jí)數(shù)學(xué)競賽試題(附答案)
- 魯科版高中化學(xué)必修2全冊(cè)教案
- 《病理學(xué)基礎(chǔ)》知識(shí)考核試題題庫與答案
- 人口分布 高一地理下學(xué)期人教版 必修第二冊(cè)
- 四年級(jí)上冊(cè)英語試題-Module 9 Unit 1 What happened to your head--外研社(一起)(含答案)
- 子宮內(nèi)膜異位癥診療指南
- 《高級(jí)計(jì)量經(jīng)濟(jì)學(xué)》-上課講義課件
評(píng)論
0/150
提交評(píng)論