2013年10月13日日曜日

kernel.pid_max の拡張

デスクトップ用途での Linux 利用では、不要と思いますが、少し大きなサーバ用途では pid の上限値を拡大しておいたほうが良いかもしれません。CentOS では /etc/sysctl.conf で設定します。
kernel.pid_max = 99999  ※デフォルト 32768、同時起動スレッド数も制限されるのでご注意を、、、
いくつまで拡張しておくかは用途次第ですが、pid を画面表示するようなツールで、くずれた表示の原因となるかもしれませんので、不足しなさそうなら、99999 (5桁、デフォルトの約3倍) にしておくと良いのではと思います。pid 管理はビットマップ方式で行われるので、pid_max を増やしてもメモリ消費はほとんどありません。
なお、最近のカーネルでは、サーバ規模に応じて自動的に拡張されるようなので、sysctl.conf に設定する前に、現在の値を確認したほうがいいです。それと、32bit 版では 32768 より大きい値は設定できません。いまどき、サーバで 32bit 版を使うことは少ないと思いますが。

2013-10-14追記
うろ覚えで”サーバ規模に応じて・・・”と書きましたが、CentOS 6 のカーネル 2.6.32-358.el6 を見てみたら、CPU 数が多い場合に拡張されるようになってました。kernel/pid.c の中です。CentOS 5 系のほうは、CPU 数に応じた自動拡張の処理は無いようでした。2.6.18-348.el5 参照。
CentOS 6 / RHEL6 のサーバ構築の際、闇雲に kernel.pid_max を設定すると、意図せず下方修正してしまうかもしれませんので、構築屋さんの方はお気をつけて。まあ、システム設計上下方修正な値で良いならよいわけでしょうけども。

2015-03-08追記
本日、マルチブート環境の FreeBSD 10.0 を 10.1 に upgrade したのですが、その際に、top を眺めていたら、FreeBSD の pid 範囲が 99999 までであるようでした。FreeBSD 付属の top では、どういう意図なのか last pid なる表示項目があり、そこを眺めていたら、99999 で wrap しました。トリビアですが、参考メモです。
補足:ZFS on Linux に強く興味を持っており、FreeBSD 実装との比較用に、マルチブート環境を作ってあります。なので、FreeBSD は殆ど使ってないです。現在は、デスクトップ利用なら CentOS 7 が最も使い易く感じています。systemd のおかげで起動が抜群に速いし。

2016-06-11追記
レッドハットのナレッジに、RHEL6 の pid_max 自動拡張の話しが説明してありましたので、リンク張っておきます。
https://access.redhat.com/solutions/28908
https://access.redhat.com/solutions/874023
CPU 数が 32 より大きいと、1024 x CPU 数 に拡張されますよと。

2019-01-30追記
kernel.pid_max が 99999 以下でないとマズいというソフトウェア (GUARDIANWALL) が実際にあった。
https://security-support.canon-its.jp/info_and_news/show/10?site_domain=GUARDIANWALL
まあ、明日は我が身と気を付けよう。

0 件のコメント:

コメントを投稿

人気ブログランキングへ にほんブログ村 IT技術ブログへ