さまざまなLinuxディストリビューションのスレッドID

さまざまなLinuxディストリビューションのスレッドID

ubuntu以前のMandrake Linuxではうまく動作しますが、Redhat Enterprise Linux(RHEL 4 Update 8、正確にはカーネル2.6.9-89)では常に失敗するサーバーアプリケーションがあります。 RHELでは、サーバーは通常、着信接続への応答を停止するまで40日以上実行されます。

Ubuntuは、約5000個の着信接続に対して、サーバーが約50個の一意のスレッドIDのみを生成することを確認しました。一方、RHELには、同じ数の受信接続に対して数千のスレッドIDがあります。私の考えでは、これがこれらのサーバーが停止する理由かもしれないと思います。

これが原因であるかどうかを確認する方法はありますか?システムの「アイドル」スレッド数を表示できるツール、またはサーバーの「スレッドリーク」を表示できるツールがありますか?スレッドの割り当てと解放方法を制御するシステム設定はありますか?特定のスレッドを着信TCP接続に「バインド」する設定がある可能性がありますが、これはUbuntuとRHELで異なる動作をしますか?

ポリスチレン

RHELスレッドIDは通常xxxx004またはxxxx005に似ていますが、xは1E8004や750005などの16進数であり、時間の経過とともに常に増加することに注意してください。

答え1

/プロセス

スレッドの最大制限に達したようです。このパラメータはここで確認できます。

$ cat /proc/sys/kernel/threads-max
12345

次のコマンドを使用してこの値を変更できます。

$ sudo echo <number> > /proc/sys/kernel/threads-max

永久に再起動するには、このファイルを編集して/etc/sysctl.conf次の行を追加します。

kernel.threads-max = 50000

次に、次のコマンドを実行します。

$ sudo sysctl -p

追加のカーネルパラメータ

コマンドを使用してカーネルの他の設定を表示できますsysctl -a

たとえば、すべての「スレッド」パラメータは次のとおりです。

$ sudo sysctl -a|grep thread
kernel.threads-max = 7514
kernel.slow-work.min-threads = 2
kernel.slow-work.max-threads = 16
vm.nr_pdflush_threads = 0

2.6および3.xカーネル

古い2.6カーネルとglibcライブラリを使用するRHEL 4.xを最新の3.xと比較することは、リンゴをオレンジと比較するのと同じです。カーネルに多くの変更があったので、それらのどれも同様の方法で動作することを期待していません。

関連情報