欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
通過(guò)ulimit改善系統性能

[推薦] 通過(guò)ulimit改善系統性能

本文介紹了 ulimit 內鍵指令的主要功能以及用于改善系統性能的 ulimit 使用方法。通過(guò)這篇文章,讀者不僅可以了解 ulimit 所起的作用,并且可以學(xué)會(huì )如何更好地通過(guò) ulimit 限制資源的使用來(lái)改善系統性能。

概述

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

ulimit 的功能和用法

ulimit 功能簡(jiǎn)述

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

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

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

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

圖 1. ulimit 的使用


在下面的章節中,將詳細介紹如何使用 ulimit 做相應的資源限制。

如何使用 ulimit

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

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

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

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


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

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

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

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

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

    ulimit – s 512
    myapp

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

  • 直接在控制臺輸入

    user@tc511-ui:~>ulimit – p 256

    限制管道的緩沖區為 256K。

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

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

Shell 進(jìn)程 1
  1. ulimit – s 100
  2. cat testFile > newFile
  3. File size limit exceeded
復制代碼
Shell 進(jìn)程 2
  1. cat testFile > newFile
  2. ls – s newFile
  3. 323669 newFile
復制代碼
那么,是否有針對某個(gè)具體用戶(hù)的資源加以限制的方法呢?答案是有的,方法是通過(guò)修改系統的 /etc/security/limits 配置文件。該文件不僅能限制指定用戶(hù)的資源使用,還能限制指定組的資源使用。該文件的每一行都是對限定的一個(gè)描述,格式如下:
  1. <domain> <type> <item> <value>
復制代碼
domain 表示用戶(hù)或者組的名字,還可以使用 * 作為通配符。Type 可以有兩個(gè)值,soft 和 hard。Item 則表示需要限定的資源,可以有很多候選值,如 stack,cpu,nofile 等等,分別表示最大的堆棧大小,占用的 cpu 時(shí)間,以及打開(kāi)的文件數。通過(guò)添加對應的一行描述,則可以產(chǎn)生相應的限制。例如:
  1. * hard noflle 100
復制代碼
該行配置語(yǔ)句限定了任意用戶(hù)所能創(chuàng )建的最大文件數是 100。

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

ulimit 管理系統資源的例子

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

使用 ulimit 限制 shell 的內存使用

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

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

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


大家可以看到此時(shí)的 ls 命令運行正常。下面設置 ulimit:
  1. >ulimit -d 1000 -m 1000 -v 1000
復制代碼
這里再溫習一下前面章節里介紹過(guò)的這三個(gè)選項的含義:

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

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

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

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

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


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

圖 3. 查看 libc 文件大小


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

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

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

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

圖 4. 查看文件


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

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


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

下面我們設置 ulimt – f 100:
  1. > ulimit -f 100
復制代碼
-f 選項的含義是:用來(lái)設置 shell 可以創(chuàng )建的文件的最大值。單位是 blocks。

現在我們再來(lái)執行一次相同的拷貝命令看看會(huì )是什么結果:

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


這次創(chuàng )建 testFile 的拷貝失敗了,系統給出的出錯信息時(shí)文件大小超出了限制。在 Linux 系統下一個(gè) block 的默認大小是 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 數量

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

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


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

使用 ulimit 限制 shell 多線(xiàn)程程序堆棧的大?。ㄔ黾涌捎镁€(xiàn)程數量)

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

ulimit -v 200000

根據本文前面的介紹,這意味著(zhù)我們的程序最多只能使用不到 200MB 的虛擬內存。由于我們的程序是一個(gè)多線(xiàn)程程序,程序在運行時(shí)會(huì )根據需要創(chuàng )建新的線(xiàn)程,這勢必會(huì )增加總的內存需求量。一開(kāi)始我們對堆棧大小的限制是 1024 (本例子中使用 1232 來(lái)說(shuō)明):
  1. # ulimit – s 1232
復制代碼
當我們的程序啟動(dòng)后,通過(guò) pmap 來(lái)查看其內存使用情況,可以看到多個(gè)占用 1232KB 的數據段,這些就是程序所創(chuàng )建的線(xiàn)程所使用的堆棧:

圖 8. 程序線(xiàn)程所使用的堆棧


每當一個(gè)新的線(xiàn)程被創(chuàng )建時(shí)都需要新分配一段大小為 1232KB 的內存空間,而我們總的虛擬內存限制是 200MB,所以如果我們需要創(chuàng )建更多的線(xiàn)程,那么一個(gè)可以改進(jìn)的方法就是減少每個(gè)線(xiàn)程的固定堆棧大小,這可以通過(guò) ulimit – s 來(lái)實(shí)現:
  1. # ulimit -s 512
復制代碼
我們將堆棧大小設置為 512KB,這時(shí)再通過(guò) pmap 查看一下我們的設置是否起作用:

圖 9. 設置 ulimit 后堆棧大小


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

總結

綜上所述,linux 系統中的 ulimit 指令,對資源限制和系統性能優(yōu)化提供了一條便捷的途徑。從用戶(hù)的 shell 啟動(dòng)腳本,應用程序啟動(dòng)腳本,以及直接在控制臺,都可以通過(guò)該指令限制系統資源的使用,包括所創(chuàng )建的內核文件的大小、進(jìn)程數據塊的大小、Shell 進(jìn)程創(chuàng )建文件的大小、內存鎖住的大小、常駐內存集的大小、打開(kāi)文件描述符的數量、分配堆棧的最大大小、CPU 時(shí)間、單個(gè)用戶(hù)的最大線(xiàn)程數、Shell 進(jìn)程所能使用的最大虛擬內存,等等方面。本文中的示例非常直觀(guān)的說(shuō)明了 ulimit 的使用及其產(chǎn)生的效果,顯而易見(jiàn),ulimit 對我們在 Linux 平臺的應用和開(kāi)發(fā)工作是非常實(shí)用的。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
ulimit 的功能和用法
C語(yǔ)言申請內存時(shí)堆棧大小限制
Linux應用程序最大打開(kāi)文件數
linux ulimit命令調優(yōu)系統參數
Dash‘s Blog -> Linux下解決squid的filedescriptors問(wèn)題
系統負載能力淺析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久