顯示具有 Linux 標籤的文章。 顯示所有文章
顯示具有 Linux 標籤的文章。 顯示所有文章

2013年5月22日 星期三

查詢修改 Linux maximum open file限制

當某些特殊情況,需大量開啟檔案時(上萬個),往往會被系統阻擋並提示 "Too many files"。此時需要針對系統參數去做修改。

而會限制 maximum open file 的部分有分兩個:一個是 kernel level,另一個為 user level。

Kernel level:限制整個系統所能開啟的最大檔案數量(所有使用者和系統的總和)。


查詢 fs.file-max
$ sysctl fs.file-max
暫時修改 fs.file-max(重開機後失效)
$ sudo sysctl -w fs.file-max=<numbers>
自動修改 fs.file-max(重開機會自動套用)
$ sudo vi /etc/sysctl.conf
在檔尾修改或插入設定。
s.file-max = <numbers>
重新載入設定
$ sudo sysctl -p




User Level,open files:限制單一使用者所能開啟的最大檔案數量。


查詢
$ ulimit -n
修改
$ sudo vi /etc/security/limits.conf
在檔尾加入需要的設定。
Example:* - nofile 65535
Syntax:<domain> <type> <item> <value>
<domain>:欲調整個使用者(可以用 * 表示所有使用者)或群組(在群組名稱前加@)。
<type>:分為 hard 和 soft,或是以 - 表示兩者。
<item>:要設定的參數名稱。
<value>:欲給予的值。

之後重新開機後,便會套用設定。



2012年12月20日 星期四

Ubuntu:apt-file 套件搜尋小技巧

今天在編譯 Raspberry Pi 的過程中,缺少了不少編譯所需要的套件。對 Linux 不熟的我,通常看到這些缺少的元件,都不知道從何下手,而在搜尋過程中發現到一個利用 apt-file 來尋找特定元件包含在哪個套件中,實際應用節省了我不少的時間。

我在 Ubuntu 12.04 寫以下範例。

1. Ubuntu 預設是沒有安裝 apt-file,先把它安裝起來
$ apt-get install apt-file

2. 安裝完成後,更新套件訊息
$ apt-file update

3. 搜尋你想要的檔案,如:curses.h
$ apt-file search curses.h

4. apt-file 會列出套件名稱,以其底下符合條件的檔案名稱,從中找到所需要的。


5. 紅框框起來的部分就是我要的
$ apt-get install libncurses5-dev

問題解決!

2012年11月14日 星期三

查詢修改 Linux maximum pid 限制

一般寫小程式,我們很少去注意到一些系統上的限制,像是 open files、max user processes...等($ ulimit -a)。而近期為了測試研究需要使用的 Pub/Sub 架構上,Server 能承受多少 client 連接、CPU 使用率、MEM 使用量、每個訊息的 delay、是否會遺失封包...等,需要開啟大量 client 去做連接測試,這時可能為遇到以下狀況:

  1. open files 超過限制,系統不再讓 server 開啟 socket 服務 client。
    (socket 也是 file describe 的一種)
  2. maximum user process 超過數量,系統表示暫時無法取得系統資源。
基本上系統程式 ulimit 的限制,在使用 root 權限執行程式時可以忽略這些限制;或是利用 ulimit 修改特定(如open files)的限制數量。但是第二點,PID 一旦超過 kernel 的限制,這就不是 ulimit 或是 root 執行程式可以解決的問題。

在 Ubuntu 12.04 LTS kernel 的預設值,PID 上限可到 32768。因此整個系統在這個限制下,能開啟的 process 最多也就 32768個。要超過這個限制,我們需要修改 kernel 在 pid_max 的限制。

●查詢 kernel pid_max
$ sysctl kernel.pid_max

●修改 kernel pid_max
$ sysctl -w kernel.pid_max=<numbers>
Example:$ sysctl -w kernel.pid_max=65536