読者です 読者をやめる 読者になる 読者になる

bekkou68の日記

開発しているサービス, IT技術, 英語など。

『Working with Unix Processes』の Processes Have Resource Limits を読みました

Unix 勉強会

はじめに

Processes Have File Descripters を読みました の続きです。

メモ

ファイルディスクリプターには 2種類リミット、ソフトリミットとハードリミットがある。ソフトリミットは物理的なリミットではない。Ruby ではリミットをこえると例外が起きる。ソフトリミットの最大値は変更可能。ハードリミットはスーパーユーザの権限があれば変更可能。リミットの get/set は Process.getrlimit/setrlimit。
リミットを変更する機会としては、負荷テストで httperf をつかって 5000 コネクションをはろうとしてリソースが不足してしまう場合はソフトリミットを増やせば解決する。

見つからなかった Process::RLIMIT_INFINITY

リミットを取得する定数として本では Process::RLIMIT_INFINITY と書いてあったけど見つからなかった。Process::RLIM_INFINITY がたぶんそれ。Ruby のバージョンで変わったのかな…? 昔の Ruby のバージョンまでは追ってないです。

試したこと

Process.setrlimit はユーザ権限では設定されている値より多くはできない。ルートではできた。また Process.setrlimit(:NOFILE, 4096, 4095) のようにハードリミットをソフトリミットより少なくしたらエラーが起きた。
ハードリミットを自分の環境で見てみたら 922京でした。でかい! 922京個もファイルを開いたらスペックをオーバーしちゃいますね。

分からなかったフレーズ

  • imposed: 課す。limits which is imposed で ”制約がかけられている” というニュアンスだと思う
  • bumping the soft limit: ソフトリミットを上げる。bump って ”押す” という意味しか知らなかったのでへーって思った