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

2012年11月8日 星期四

screenrc

最近時常需要開啟多個 terminal 來測試程式執行狀況,所以 pietty 越開越多,桌面也越來越亂、難管理。近期在詢問學姊作業的事情時,看到學姊的 Ubuntu console,在一個畫面中可以切換到不同的 console,按按鍵就可以互相切換,就一直很有興趣。

找了幾天,用過 screen、tmux,screen 在預設的設定上相當簡陋,當初還以為不是這款,直到在 Google 搜尋到相關的 screenrc 檔後,才知道「這就是我尋找很久的程式!」

參考網頁:

  1. screenrc of Vim-like - 凍仁的 Ubuntu 筆記
  2. [Linux] screen教學與bindkey設定用法 - 雅砌工坊

我修改上面兩個 Blog 中所寫的 screenrc,保留部份自己要的功能。

startup_message off

caption always "%{=u .r} %-w%<%{=ub .Y}%n %t%{=u .r}%+w "
hardstatus alwaysignore
hardstatus alwayslastline "%{= .K} [%l]%<%=%{= .Y}$USER%{= .R}@%H %=%{= .m} %Y/%m/%d%{= .M} %0c "

defutf8 on
altscreen on
shelltitle '$ |bash'
vbell off

# bind F9 to create a new screen
bindkey -k k9 screen
# bind F10 to kill current screen window
bindkey -k k; kill
# bind F11 to move to previous window
bindkey -k F1 prev
# bind F12 to move to next window
bindkey -k F2 next