linux : ulimit 命令使用說明、參數解說

ulimit -a 用來顯示當前的各種用戶進程限制
Linux 對于每個用戶,系統限制其最大進程數,為提高性能,可以根據設備資源情況,
設置個Linux用戶的最大進程數,一些需要設置為無限制:

數據段長度:ulimit -d unlimited最大內存大小:ulimit -m unlimited堆棧大小:ulimit -s unlimited

用這個命令的時候主要是為了產生 core 文件,就是程序運行發行段錯誤時的文件:ulimit -c??unlimited 生成 core 文件。

?

功能說明:控制 shell 程序的資源。

語  法:ulimit [-aHS][-c <core文件上限>][-d <數據節區大小>][-f <文件大小>][-m <內存大小>][-n <文件數目>][-p <緩沖區大小>][-s <堆疊大小>][-t <CPU時間>][-u <程序數目>][-v <虛擬內存大小>]PS: 可選參數直接寫在同一行,現在換行只是為了方便查看參數定義

補充說明:ulimit為shell內建指令,可用來控制shell執行程序的資源。

參  數:

?  -a  顯示目前資源限制的設定。?-c <core文件上限>  設定core文件的最大值,單位為區塊。?-d <數據節區大小>  程序數據節區的最大值,單位為KB。?-f <文件大小>  shell所能建立的最大文件,單位為區塊。?-H  設定資源的硬性限制,也就是管理員所設下的限制。?-m <內存大小>  指定可使用內存的上限,單位為KB。?-n <文件數目>  指定同一時間最多可開啟的文件數。?-p <緩沖區大小>  指定管道緩沖區的大小,單位512字節。?-s <堆疊大小>  指定堆疊的上限,單位為KB。?-S  設定資源的彈性限制。?-t <CPU時間>  指定CPU使用時間的上限,單位為秒。?-u <程序數目>  用戶最多可開啟的程序數目。?-v <虛擬內存大小>  指定可使用的虛擬內存上限,單位為KB。

1,說明:?ulimit用于shell啟動進程所占用的資源.?

2,類別:?shell內建命令

3,語法格式:?ulimit [-acdfHlmnpsStvw] [size]

4,參數介紹:


-H 設置硬件資源限制.-S 設置軟件資源限制.-a 顯示當前所有的資源限制.-c size:設置core文件的最大值.單位:blocks-d size:設置數據段的最大值.單位:kbytes-f size:設置創建文件的最大值.單位:blocks-l size:設置在內存中鎖定進程的最大值.單位:kbytes-m size:設置可以使用的常駐內存的最大值.單位:kbytes-n size:設置內核可以同時打開的文件描述符的最大值.單位:n-p size:設置管道緩沖區的最大值.單位:kbytes-s size:設置堆棧的最大值.單位:kbytes-t size:設置CPU使用時間的最大上限.單位:seconds-v size:設置虛擬內存的最大值.單位:kbytes

5,簡單實例:
1]在RH8的環境文件/etc/profile中,我們可以看到系統是如何配置ulimit的:

CODE:

#grep ulimit /etc/profile
ulimit -S -c 0 > /dev/null 2>&1

這條語句設置了對軟件資源和對core文件大小的設置

2] 如果我們想要對由shell創建的文件大小作些限制, 如:

CODE:

#ll h
-rw-r--r-- 1 lee lee 150062 3月 22 02:39 h
#ulimit -f 100 #設置創建文件的最大塊(一塊=512字節)
#cat h>newh
File size limit exceeded
#ll newh
-rw-r--r-- 1 lee lee 51200 4月 8 11:47 newh

文件h的大小是150062字節,而我們設定的創建文件的大小是512字節x100塊=51200字節
當然系統就會根據你的設置生成了51200字節的newh文件.

3] 可以像實例1]一樣,把你要設置的ulimit放在/etc/profile這個環境文件中.

當系統中的一些程序在遇到一些錯誤以及crash時,系統會自動產生core文件記錄crash時刻系統信息,包括內存和寄存器信息,用以程序員日 后debug時可以使用。這些錯誤包括段錯誤、非法指令、總線錯誤或用戶自己生成的退出信息等等,一般地,core文件在當前文件夾中存放。

core文件有時可能在你發生錯誤時,并沒有出現在你當前的文件夾中,發生這種情況的原因有兩個:一個是當前終端被設置為不能彈出core文件;另一種則是core文件被指定了路徑。

對于前者,我們可以使用ulimit命令對core文件的大小進行設定。一般默認情況下,core文件的大小被設置為0,這樣系統就不dump出core文件了。這時,使用命令:ulimit -c unlimited進行設置,就可以把core文件的大小設置為無限大,同時也可以使用數字來替代unlimited,對core文件的上限制做更精確的設定。

除了可以設置core文件的大小之外,還可以對core文件的名稱進行一些規定。這種設置是對/proc/sys/kernel/core_pattern和/proc/sys/kernel/core_uses_pid這兩個文件進行修改。改動這兩個文件的方法如下:

echo <pattern> > /proc/sys/kernel/core_pattern

echo <"0"/"1"> /proc/sys/kernel/core_uses_pid

并且注意,只有超級用戶才可以修改這兩個表。

core_pattern接受的是core文件名稱的pattern,它包含任何字符串,并且用%作為轉移符號生成一些標示符,為core文件名稱加入特殊含義。已定義的標示符有如下這些:

%%:相當于%%p:相當于<pid>%u:相當于<uid>%g:相當于<gid>%s:相當于導致dump的信號的數字%t:相當于dump的時間%e:相當于執行文件的名稱%h:相當于hostname

除以上這些標志位外,還規定:

1、末尾的單個%可以直接去除;2、%加上除上述以外的任何字符,%和該字符都會被去除;3、所有其他字符都作為一般字符加入名稱中;4、core文件的名稱最大值為64個字節(包括'\0');5、core_pattern中默認的pattern為core;6、為了保持兼容性,通過設置core_uses_pid,可以在core文件的末尾加上%p;7、pattern中可以包含路徑信息。

------------------------------------------------? 我是分隔線 ------------------------------------------------------------------

下面的資料是從互聯網上整理的來的

1. 可以用ulimit -a 查看一下棧的大小。
在內核2.6.20下, stack size 為8192 kbytes
如果這里沒有限制,就棧的大小就只受內存的限制。2G是上限。

2. core 文件
?* 開啟或關閉core文件的生成

ulimit -c 可以查看是否打開此選項,若為0則為關閉;ulimit -c 0可手動關閉ulimit -c 1000 為設置core文件大小最大為1000kulimit -c unlimited 設置core文件大小為不限制大小

很多系統在默認的情況下是關閉生成core文件的,這個命令可以加到你的profile中去。

3.設置Core Dump的核心轉儲文件目錄和命名規則

在默認的情況下,很多系統的core文件是生成在你運行程序的目錄下,或者你在程序中chdir后的那個目錄,然后在core文件的后面加了一個 pid。在實際工作中,這樣可能會造成很多目錄下產生core文件,不便于管理,實際上,在2.6下,core文件的生成位置和文件名的命名都是可以配置 的。

/proc/sys/kernel/core_uses_pid 可以控制產生的core文件的文件名中是否添加pid作為擴展。如果添加則文件內容為1,否則為0


proc/sys/kernel/core_pattern可以設置格式化的core文件保存位置或文件名,比如原來文件內容是core-%e?
可以這樣修改:
echo "/tmp/core-%e-%p" > core_pattern
將會控制所產生的core文件會存放到/corefile目錄下,產生的文件名為core-命令名-pid-時間戳
以下是參數列表:??

?   %p - insert pid into filename 添加pid%u - insert current uid into filename 添加當前uid%g - insert current gid into filename 添加當前gid%s - insert signal that caused the coredump into the filename 添加導致產生core的信號%t - insert UNIX time that the coredump occurred into filename添加core文件生成時的unix時間%h - insert hostname where the coredump happened into filename 添加主機名%e - insert coredumping executable name into filename 添加命令名


當然,你可以用下列方式來完成
sysctl -w kernel.core_pattern=/tmp/core-%e-%p

這些操作一旦計算機重啟,則會丟失,如果你想持久化這些操作,可以在 /etc/sysctl.conf文件中增加:
kernel.core_pattern=/tmp/core%p

加好后,如果你想不重啟看看效果的話,則用下面的命令:
sysctl -p /etc/sysctl.conf

------------------------------------------------? 我是分隔線 ------------------------------------------------------------------

高手指教
? ? 問題1:現有一程序P 長期在服務器上運行,目前經常是每1天死掉一次(段錯誤)。
??? 目前解決方法:用SecureCRT開一個終端,并在服務其上設置ulimit -c nulimited,然后啟動程序P。

用ulimite -a 命令查詢結果如下:

?        core file size ?? ?? (blocks, -c) unlimiteddata seg size ?? ?? ??? (kbytes, -d) unlimitedfile size ?? ?? ?? ?? (blocks, -f) unlimitedpending signals ?? ?? ?? ?? ??? (-i) 1024max locked memory ?? (kbytes, -l) 32............

? ? ? ? ?表明core文件可以生成。
?? ?? ?? 并測試利用kill -6 pid能夠core文件。

?? 目前的困難:當運行ulimit -c nulimited終端 (并且該終端將程序P啟動到后臺了 ./P &)關閉,程序P死掉后并沒有生成 core文件。經試驗后發現ulimit 命令與終端有關。

?? 問題2:如何設置能夠生成core 文件,與終端無關。即,程序啟動,關閉終端,當程序死掉(段錯誤)后能夠生成core文件。

在 /etc/security/limits.conf (中設置 redhat衍生系linux)或 /etc/profile中的:
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
注釋掉上面一行。
還有其他UNIX類操作系統也有自己的配置文件可以設置。

------------------------------------------------? 我是分隔線 ------------------------------------------------------------------

gdb core 多線程。在linux環境下調試多線程,總覺得不像.NET那么方便。這幾天就為找一個死鎖的bug折騰好久,介紹一下用過的方法吧。

多線程如果dump,多為段錯誤,一般都涉及內存非法讀寫。可以這樣處理,使用下面的命令打開系統開關,讓其可以在死掉的時候生成core文件。???
ulimit -c unlimited
這樣的話死掉的時候就可以在當前目錄看到core.pid(pid為進程號)的文件。接著使用gdb:
gdb ./bin ./core.pid?
進去后,使用bt查看死掉時棧的情況,在使用frame命令。

還有就是里面某個線程停住,也沒死,這種情況一般就是死鎖或者涉及消息接受的超時問題(聽人說的,沒有遇到過)。遇到這種情況,可以使用:
gcore pid?(調試進程的pid號)
手動生成core文件,在使用pstack(linux下好像不好使)查看堆棧的情況。如果都看不出來,就仔細查看代碼,看看是不是在 if,return,break,continue這種語句操作是忘記解鎖,還有嵌套鎖的問題,都需要分析清楚了。

------------------------------------------------? 我是分隔線 ------------------------------------------------------------------
5.舉例
在Linux下寫程序的時候,如果程序比較大,經常會遇到“段錯誤”(segmentation fault)這樣的問題,這主要就是由于Linux系統初始的堆棧大小(stack size)太小的緣故,一般為10M。我一般把stack size設置成256M,這樣就沒有段錯誤了!命令為:
ulimit?? -s 262140?
如果要系統自動記住這個配置,就編輯/etc/profile文件,在 “ulimit -S -c 0 > /dev/null 2>&1”行下,添加“ulimit?? -s 262140”,保存重啟系統就可以了!?

?可以把你要設置的 ulimit 放在 /etc/profile 這個環境文件中.
用途? ?設置或報告用戶資源極限。
語法? ?ulimit [ -H ] [ -S ] [ -a ] [ -c ] [ -d ] [ -f ] [ -m ] [ -n ] [ -s ] [ -t ] [ Limit ]
描述? ?ulimit 命令設置或報告用戶進程資源極限,如 /etc/security/limits 文件所定義。文件包含以下缺省值極限:?

fsize = 2097151
core = 2097151
cpu = -1
data = 262144
rss = 65536
stack = 65536
nofiles = 2000?

當新用戶添加到系統中時,這些值被作為缺省值使用。當向系統中添加用戶時,以上值通過 mkuser 命令設置,或通過 chuser 命令更改。?
極限分為軟性或硬性。通過 ulimit 命令,用戶可將軟極限更改到硬極限的最大設置值。要更改資源硬極限,必須擁有 root 用戶權限。?
很多系統不包括以上一種或數種極限。 特定資源的極限在指定 Limit 參數時設定。Limit 參數的值可以是每個資源中指定單元中的數字,或者為值 unlimited。要將特定的 ulimit 設置為 unlimited,可使用詞 unlimited。?


注:在 /etc/security/limits 文件中設置缺省極限就是設置了系統寬度極限, 而不僅僅是創建用戶時用戶所需的極限。?
省略 Limit 參數時,將會打印出當前資源極限。除非用戶指定 -H 標志,否則打印出軟極限。當用戶指定一個以上資源時,極限名稱和單元在值之前打印。如果未給予選項,則假定帶有了 -f 標志。?
由于 ulimit 命令影響當前 shell 環境,所以它將作為 shell 常規內置命令提供。如果在獨立的命令執行環境中調用該命令,則不影響調用者環境的文件大小極限。以下示例中正是這種情況:?

nohup ulimit -f 10000
env ulimit 10000?

一旦通過進程減少了硬極限,若無 root 特權則無法增加,即使返回到原值也不可能。?
關于用戶和系統資源極限的更多信息,請參見 AIX 5L Version 5.3 Technical Reference: Base Operating System and Extensions Volume 1 中的 getrlimit、setrlimit 或 vlimit 子例程。
標志

-a???? 列出所有當前資源極限。-c???? 以 512 字節塊為單位,指定核心轉儲的大小。-d???? 以 K 字節為單位指定數據區域的大小。-f???? 使用 Limit 參數時設定文件大小極限(以塊計),或者在未指定參數時報告文件大小極限。缺省值為 -f 標志。-H???? 指定設置某個給定資源的硬極限。如果用戶擁有 root 用戶權限,可以增大硬極限。任何用戶均可減少硬極限。-m???? 以 K 字節為單位指定物理存儲器的大小。-n???? 指定一個進程可以擁有的文件描述符的數量的極限。-s???? 以 K 字節為單位指定堆棧的大小。-S???? 指定為給定的資源設置軟極限。軟極限可增大到硬極限的值。如果 -H 和 -S 標志均未指定,極限適用于以上二者。-t???? 指定每個進程所使用的秒數。

退出狀態?
返回以下退出值:

0???? 成功完成。>0???? 拒絕對更高的極限的請求,或發生錯誤。

示例?
要將文件大小極限設置為 51,200 字節,輸入:?
ulimit -f 100

?

非常抱歉,這篇文章來自草稿整理:太久了,不清楚各個段落轉自何處了 ...

如果你看到原文可以給我留言,我會再補上,謝謝。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448848.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448848.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448848.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

給技術人上的管理課:平衡和集中

摘要&#xff1a;大中型團隊管理是技術人轉型的巨大挑戰&#xff0c;這個階段的管理工作&#xff0c;仍然可以歸為技術范疇&#xff0c;依靠的大抵是管理人的筋肉力量。是否會管理&#xff0c;要看能否管好超出自己筋肉力量規模的團隊。此中的關鍵&#xff0c;在于把握平衡和集…

理解分布式id生成算法--雪花算法(SnowFlake)

分布式ID生成算法的有很多種&#xff0c;Twitter的SnowFlake就是其中經典的一種。 注&#xff1a; 1B就是1個字節。Byte、KB、B、MB、GB之間的關系是&#xff1a;Bit——比特 &#xff1b; B ——字節&#xff1b;KB——千字節&#xff1b;MB——兆字節&#xff1b;GB——吉字節…

[ZJOI2010]貪吃的老鼠

P2570 [ZJOI2010]貪吃的老鼠 在Ta的博客查看 顯然二分&#xff0c;最大流判定 要滿足兩個條件&#xff1a; (1) 在任一時刻&#xff0c;一只老鼠最多可以吃一塊奶酪&#xff1b; (2) 在任一時刻&#xff0c;一塊奶酪最多被一只老鼠吃。 先按照奶酪的邊界進行離散化&#xff0c…

IP: 169.254.0.0/16 地址用途

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 一直困惑169.254.0.0/16是干嘛的&#xff0c;每次筆記本dhcp獲取地址失敗后&#xff0c;就會隨機在這個B類地址段獲取一個地址&#…

值得借鑒的30條好習慣

我有幸一直能生活在比較好的圈子中&#xff0c;我的優秀的同學、舍友&#xff0c;乃至我現在創業后遇到的優秀創業者&#xff0c;從他們身上看到和學到一些好的習慣。 我一直覺得&#xff0c;好的習慣&#xff0c;是成功和進步的重要一點。我隨手總結一些給大家&#xff0c;零散…

【PKUSC2019】線弦圖【計數】【樹形DP】【分治FFT】

Description 定義線圖為把無向圖的邊變成點&#xff0c;新圖中點與點之間右邊當且僅當它們對應的邊在原圖中有公共點&#xff0c;這樣得到的圖。 定義弦圖為不存在一個長度大于3的純環&#xff0c;純環的定義是在環上任取兩個不相鄰的點&#xff0c;它們之間都沒有邊&#xff0…

注解 @PostConstruct 與 @PreDestroy 詳解及實例

簡介 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Java EE5 引入了PostConstruct和PreDestroy這兩個作用于Servlet生命周期的注解&#xff0c;實現Bean初始化之前和銷毀之前的自定義操…

別讓6種不良心理偷走你的好人緣

眾所周知&#xff0c;擁有正常、健康的交際圈對于人的身心健康都是很有幫助的。但是若想維系好自己的交際圈&#xff0c;也是很不容易的&#xff0c;甚至在不經意間產生的某些心理&#xff0c;就會直接給大家的人際交往帶來影響。那么接下來&#xff0c;小編就先為大家歸納一下…

PHP 安裝xdebug

xdebug官網: https://xdebug.org 安裝步驟如下: 使用 phpinfo() 打印出PHP相關信息, 全選, 復制 打開 xdebug 網站: https://xdebug.org/wizard.php 在圖中輸入框中粘貼你復制的信息, 點擊 Analyse my phpinfo() output 在結果中點擊下載, 然后按照它提示的步驟進行操作即可…

apt-clone:備份已安裝的軟件包并在新的 Ubuntu 系統上恢復它們

當我們在基于 Ubuntu/Debian 的系統上使用 apt-clone&#xff0c;包安裝會變得更加容易。如果你需要在少量系統上安裝相同的軟件包時&#xff0c;apt-clone 會適合你。 如果你想在每個系統上手動構建和安裝必要的軟件包&#xff0c;這是一個耗時的過程。它可以通過多種方式實現…

分布式消息中間件 : Rocketmq

簡述 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 分布式消息中間件&#xff0c;主要是實現分布式系統中解耦、異步消息、流量銷鋒、日志處理等場景。生產中用的最多的消息隊…

PV、UV、UIP、VV、CPC、CPM、RPM、CTR指的是什么?

PV(PageView)&#xff1a;網站瀏覽量&#xff0c;指頁面的瀏覽次數&#xff0c;用以衡量網站用戶訪問的網頁數量。用戶沒打開一個頁面便記錄1次PV&#xff0c;多次打開同一頁面則瀏覽量累計&#xff1b;UV(UniqueVistor)&#xff1a;獨立訪客數&#xff0c;指1天內訪問某站點的…

linux opencl(AMD) Example

最近對并行計算很感興趣。不過搞MPI對我來說暫時沒什么用&#xff0c;基于GPU的并行計算倒是挺實用。網上的資料都是CUDA的。實質上我對CUDA一點興趣都沒有。無論別人的架構多么先進&#xff0c;我這個只有AMD顯卡的小孩都是旁觀者而已。在這里記錄一下一個opencl程序的編譯過程…

php使用supervisor管理進程腳本

supervisor是用python開發的一個在linux系統下的進程管理工具&#xff0c;可以方便的監聽&#xff0c;啟動&#xff0c;停止一個或多個進程。當一個進程被意外殺死后&#xff0c;supervisor監聽到后&#xff0c;會自動重新拉起進程。 一、supervisor的安裝 1、通過easy_install…

重寫規則和重載規則

重寫規則&#xff1a; 發生在有繼承關系的類之間&#xff08;同一類就是重載了&#xff09;相同的方法名&#xff0c;參數列表&#xff0c;返回類型可見性&#xff08;public,protected,private&#xff09;不能被縮小異常不能被放大規則與c中不一樣靜態類型不能被重寫方法重載…

消息中間件:RocketMQ 介紹(特性、術語、原理、優缺點、消息順序、消息重復)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 消息中間件的作用 1. 應用解耦 2. 異步處理 比如用戶注冊場景&#xff0c;注冊主流程完成以后&#xff0c;需要調用郵件系統發送郵件…

C# JsonHelper類

記錄一下&#xff0c;方便下次用。 public class JsonHelper{#region Json/// <summary>/// JavaScriptSerializer/// </summary>/// <typeparam name"T"></typeparam>/// <param name"obj"></param>/// <returns&…

[譯】Redux入門教程(一)

前言 老外寫技術文章真是叼&#xff0c;這是國外的一個程序員寫的一個簡單易懂,循序漸進的Redux教程&#xff0c;本著共享的精神&#xff0c;就翻譯出來給大家一起看&#xff0c;文章最后有鏈接&#xff0c;不想看我翻譯的直接去看原文吧。 下面是原教程的英文目錄 這篇先更三分…

使用 Intellij Idea 打包 java 工程為可執行 jar 包

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 其實還有個簡單多了方法&#xff0c;見&#xff1a; 超簡單方法&#xff1a; Intellij Idea 把 java 工程打成可運行的 jar 步驟&#x…

QuickStart系列:docker部署之Gitlab本地代碼倉庫

gitlab是可以在本地搭建的使用git作為源代碼管理的倉庫。 運行環境&#xff1a; win10vmware14docker7docker 1. 使用命令拉取鏡像&#xff08;非必須&#xff0c;耗時比較久&#xff0c;這里以ce為準&#xff0c;ce是社區版&#xff0c;ee是企業版&#xff09;&#xff1a; do…