オルタナティブ・ブログ > プログラマー社長のブログ >

プログラミングでメシが食えるか!?

Linuxでの最大スレッド数

»

今日も昨日に続き、高性能ハード・ネットワーク環境で試行錯誤していました。今日、まずクリアーしたかったのが、スレッド数の壁です。多数のTCP/IPコネクションを扱うプログラムの場合、作りやすさから、スレッドを多用することがほとんどなのですが、昨日やってみた感じだと、OS全体で32767個くらいで、「Cannot allocate memory」エラーが発生していました。

Linuxの場合、カーネルのパラメーターを調整することで、様々な上限値を変えることができるのですが、パラメーターの数が多く、どれがどの場合に有効かがわかりにくいのです。

結局は、kernel.threads-maxと、kernel.pid_max、vm.max_map_countを増やせば、スレッド数が増やせた、という感じでした。


sysctl -w kernel.threads-max=600000
sysctl -w kernel.pid_max=600000
sysctl -w vm.max_map_count=600000

こんな感じに実行すると、大体26万スレッドくらい立ち上げることができました。一応目標の数は超えられたので、一安心です。

その他、ネットワーク関連のカーネルパラメーターも調整し、大体目的の状態に近くなってきたのですが・・・まだ実は1点ネットワーク関連で引っかかってます・・・。

それをクリアーすれば、後はプログラム側のチューニングで何とかなりそう、という感じです。10Gイーサーともなると、性能要件も非常に高いので、OS関連・プログラム関連共に、そう簡単にはクリアーできません。まあ、それがまた楽しいですし、ノウハウになるのですけどね。

Comment(0)