❶ linux下limit知識
一般新機器,在非root用戶下部署java項目之前,一定需要新調整下機器的參數,這里與我們的java進程息息相關的就是 /etc/ecurity/limits 這里的配置。
/etc/ecurity/limits 限制住了系統用戶下所有的文件句柄數,線程數,cpu時間片等等。我們這里只需要關注文件 句柄數和線程數 。
可以查看系統的資源限制,如下:
上面的 open files (-n) 65536 和 max user processes (-u) 4096 是我們重點關注的。它限制了文件最大句柄數和線程數。
編輯 /etc/security/limits.conf , 修改如下配置:
注意 :還需要修改一個地方,否則我們進程的最大限制會被重置掉,筆者之前在這個地方踩了不少坑。需要編輯 /etc/security/limits.d/ 下的文件。
這個 * 會有一個軟線程的最大限制為 4096,會覆蓋 /etc/security/limits.conf 里的配置。一般程序啟動的線程都是屬於 soft nproc 。
網上的說法是修改了 limit 後,重啟linux系統才會奏效。事實上不是這樣,修改了之後,新啟動的進程會使用新的limit限制參數,而之前起的進程還是會使用老的配置,所以只需要重啟進程即可。
可以評估一個應用的指標情況,可以看他的句柄數、線程數等等, 在 /proc/{pid}/fd/ 可以查看進程所有打開的文件,socket連接也是一個文件,當存在很多socket沒有釋放的話,說明open 文件沒有關閉或者釋放。
❷ linux怎麼查看默認的句柄數
您好!很高興能為您解答。
修改文件句柄數在Linux下,我們使用ulimit -n
命令可以看到單個進程能夠打開的最大文件句柄數量(socket連接也算在裡面)。系統默認值1024。
對於一般的應用來說(象Apache、系統進程)1024完全足夠使用。但是如何象squid、mysql、java等單進程處理大量請求的應用來說就有
點捉襟見肘了。如果單個進程打開的文件句柄數量超過了系統定義的值,就會提到「too many files
open」的錯誤提示。如何知道當前進程打開了多少個文件句柄呢?下面一段小腳本可以幫你查看:
1.lsof -n |awk '{print $2}'|sort|uniq -c |sort
-nr|more
在系統訪問高峰時間以root用戶執行上面的腳本,可能出現的結果如下:
1.# lsof -n|awk '{print $2}'|sort|uniq -c |sort
-nr|more
2. 131 24204
3. 57 24244
4. 57 24231
5. 56 24264
其中第一行是打開的文件句柄數量,第二行是進程號。得到進程號後,我們可以通過ps命令得到進程的詳細內容。
1.ps -aef|grep 24204
2.mysql 24204 24162
99 16:15 ? 00:24:25 /usr/sbin/mysqld
哦,原來是mysql進程打開最多文件句柄數量。但是他目前只打開了131個文件句柄數量,遠遠底於系統默認值1024。
但是如果系統並發特別大,尤其是squid伺服器,很有可能會超過1024。這時候就必須要調整系統參數,以適應應用變化。Linux有硬性限制和軟性限制。可以通過ulimit來設定這兩個參數。方法如下,以root用戶運行以下命令:
1.ulimit -HSn 4096
以 上命令中,H指定了硬性大小,S指定了軟性大小,n表示設定單個進程最大的打開文件句柄數量。個人覺得最好不要超過4096,畢竟打開的文件句柄數越多響
應時間肯定會越慢。設定句柄數量後,系統重啟後,又會恢復默認值。如果想永久保存下來,,可以修改 /etc/profile
把上面命令加到最後。(findsun提出的辦法比較合理)
/////////////////////////////////////////////////////////////////////////////
在 Linux下面部署應用的時候,有時候會遇上Socket/File: Can't open so many
files的問題,其實Linux是有文件句柄限制的(就像WinXP?),而且默認不是很高,一般都是1024,作為一台生產伺服器,其實很容易就達到
這個數量,因此我們需要把這個值改大一些。
大概知道ulimit這個命令是相關的,上Google搜索了一下,大多數說的很含糊,也沒有統一說一下,經過兩個小時看了不少文章終於弄清楚ulimit相關的一些配置問題。
我們可以用ulimit -a來查看所有限制值,我只關心文件句柄數量的問題
open files (-n) 1024
這個就是限制數量
這里,有很多ulimit的文章都說的很含糊,究竟這個1024是系統的限制,還是用戶的限制呢。其實,這個是用戶限制來的,完整的說法,應該是當前用戶准備要運行的程序的限制。
1、這個限制是針對單個程序的限制
2、這個限制不會改變之前已經運行了的程序的限制
3、對這個值的修改,退出了當前的shell就會消失
比如說,我先運行了一個程序A,然後通過ulimit修改了限制為2048,然後運行B,然後退出了shell再登錄,然後運行C。那就只有B可以打開2048個句柄。
如果我們需要改變整體的限制值,或者我們運行的程序是系統啟動的,應該怎麼處理呢
其中一個方法,是想ulimit修改命令放入/etc/profile裡面,但是這個做法並不好
正確的做法,應該是修改/etc/security/limits.conf
裡面有很詳細的注釋,比如
* soft nofile 2048
* hard nofile 32768
就可以將文件句柄限制統一改成軟2048,硬32768
這里涉及另外一個問題,什麼是軟限制,什麼是硬限制
硬限制是實際的限制,而軟限制,是warnning限制,只會做出warning
其實ulimit命令本身就有分軟硬設置,加-H就是硬,加-S就是軟
默認顯示的是軟限制,如果修改的時候沒有加上的話,就是兩個一起改
配置文件最前面的一位是domain,設置為星號代表全局,另外你也可以針對不同的用戶做出不同的限制
修改了,重新登錄用ulimit一開就立刻生效了,不過之前啟動過的程序要重新啟動才能使用新的值。我用的是CentOS,似乎有些系統需要重啟才能生效。
ulimit其實就是對單一程序的限制
那系統總限制呢
其實是在這里,/proc/sys/fs/file-max
可以通過cat查看目前的值,echo來立刻修改
另外還有一個,/proc/sys/fs/file-nr
只讀,可以看到整個系統目前使用的文件句柄數量
查找文件句柄問題的時候,還有一個很實用的程序lsof
可以很方便看到某個進程開了那些句柄
也可以看到某個文件/目錄被什麼進程佔用了。
❸ linux下面怎麼查詢某個進程正在使用的socket句柄數量
可以通過指令查詢當前進程打開了多少句柄,Linux下有exec函數族可以執行指令內,把指令寫進去就行了。容
-查看當前進程打開了多少句柄數
# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
-根據ID號來查看進程名。
# ps aef|grep ID號
滿意請採納。
❹ linux如何獲取磁碟的繁忙程度和打開的文件句柄數
磁碟繁忙程度一般用iostat看
可以從 /proc/sys/fs/file-nr,看到整個系統目前使用的文件句柄數量回
查找文件句柄問題的時候,還答有一個很實用的程序lsof.可以很方便看到某個進程開了那些句柄.也可以看到某個文件/目錄被什麼進程佔用了
❺ Unix如何查看用戶的最大文件句柄數及使用情況
Linux系統如何查看修改最大打開文件數,這個問題對於很多剛剛學習linux的小夥伴來說覺得有點奇怪。Linux系統和windows不同之處在於更強的多任務多線程,由於文件系統結構的不同linux針對不同進程不同用戶都可以設置最打打開文件數。(如下圖,在設置某些配置文件的時候,會出現下圖提示超過系統最大打開文件數
工具/原料
Centos
Linux文件數打開數
查看當前系統最大的文件打開數,如下圖
在linux終端中輸入ulimit -a
「open files」參數選項後面的數值就是當前系統支持的最大打開文件數
修改linux最大文件打開數
如果要修改linux最大文件打開數,可以通過如下圖參數命令 unlimit -n 後面接需要設置的文件數量。
設置好之後,再次查看 unlimit -a 你會發現已經設置為新的數量了
設置好之後,再次編輯修改重啟設置的服務,已經沒有剛剛那個1024文件數限制的報錯提示
其他修改方法
除此之外,如果針對不同的用戶。也可以通過編輯修改 /etc/rc.local文件設置環境變數,添加 unlimit -n
如下圖,重啟之後一般就自動設置好了
查看系統句柄文件數
當前系統文件句柄的最大數目,只用於查看,不能設置修改
cat /proc/sys/fs/file-max
查看進程打開文件數
如果需要查看所有進程的文件打開數,如下圖命令lsof |wc -l
特別提醒:
對於做伺服器的linux系統來說,適當調整增加文件打開數量。可以加快服務性能,並且提供服務的連接線程數量。咗嚛提醒為了伺服器性能,建議也不要設置太大哈
❻ Linux文件句柄佔用數量查看與設置
安裝lsof
yum install lsof
查看線程占句柄數
ulimit -a
查看系統打開句柄最大數量
more /proc/sys/fs/file-max
1
查看打開句柄總數
lsof|awk '{print $2}'|wc -l
1
根據打開文件句柄的數量降序排列,其中第二列為進程ID:
lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more
1
根據獲取的進程ID查看進程的詳情
ps -ef |grep
1
修改linux單進程最大文件連接數
修改linux系統參數。vi /etc/security/limits.conf 添加
softnofile65536
hardnofile65536
修改以後保存,注銷當前用戶,重新登錄,執行ulimit -a ,ok ,參數生效了: