top
コマンドを使用してサーバーの状態を確認する方法、サーバーを変更する必要があるのか、リソースを追加するのかを知りたいです。以下はtop
私のサーバーからのコマンド出力です。
以下はいくつかの異なる事実です。平均負荷範囲は28.XXから77.XXです。 - CPU %id はほとんど 10.0 から 22.0 の間であり、時には 30.0 に落ちる場合もあります。 - サーバーは仮想マシンで実行されます。 - 仮想マシンは、Intel(R)Xeon(R)CPU E5-2403 0 @ 1.80GHz、4コアを搭載したサーバーにインストールされています。 - Webアプリケーション、データベースサービス、memcached、Webサーバー、およびその他の関連サーバーアプリケーションが長い間実行されています。注。 - Presence.pyサービスは、最も作業量の多いサービスで、現在703ノードの存在を確認しています。
システムにRAMを追加する必要はないと言いたいのですが、CPUが圧倒されているようです。それでも100〜200のノードを追加する必要があるため、サーバーはこれを処理できないようです。私は正しいですか?
編集:存在.pyの背景
Presence Service(presence.py)は、(コア数の2倍)プロセス、マスタープロセス、および(コア数の2倍 - 1)ワーカープロセスで実行される独自のアプリケーションです。登録された各ノードに対してワーカープロセスの1つにスレッドが作成されるため、700個のノードがある場合、各ワーカープロセスは約100個のスレッドを実行します。各スレッドはTelnetまたはHTTPを介して1秒間に1回、そのノードの状態を確認するため、各プロセスの負荷を想像できます。これは、各スレッドがネットワークI / Oを待機または待機するのにほとんどの時間を費やすことを意味します。。
Presenceサービスは、350ノードの負荷から始めてうまくいっていましたが、しばらく負荷を増やし始め、600ノードを超えて少しゆっくり戻り始めました。たとえば、次のコマンドを実行すると、curl www.google.com
実行に数秒かかります。
答え1
存在.pyをより軽いソリューションに置き換えます。それはまるで
cat config.txt | while read C; do
C=($C)
nmap -p ${C[1]} ${C[0]} | grep open || mail -s "Warning; port ${C[1]} on server ${C[0]} is unreachable" ${C[2]} < /dev/null &
done;
crontab
同様の構成の見積もり
echo -e "127.0.0.1\t22\[email protected]" > config.txt
ポートを確認するためにかなりのCPUを使用する理由はありません。これは厳密にIO制限されたタスクです。 (CPU時間がますますuser
短くなるのがわかりますwait
。)
このBashの例は重い解決策(再利用不可能)と見なされます。 Cでコーディングするのが本当に簡単な場合は... Pythonがオブジェクトのリサイクルに失敗したり、他の原因で不要な作業を監視したりできます。非効率的なコードに多くのリソースを投資することは可能ですが、単に非効率性を変更する方が安いことがよくあります。また、欲しいかもしれませんネットワークスタックの調整。
答え2
これは、CPU全体の約80%が使用される非常に高い負荷平均です。忙しいユーザー領域、かなり忙しいカーネル、そしていくつかのソフトウェア割り込みまで、すべてここに表示されます。
私は本当にあなたが負荷に役立つ非同期ネットワーク呼び出しをしていることを願っています。しかし、それはプログラムに関するものではなく、システムに関するものです。あなたが言ったように、CPUがもっと必要だと言いたいです。また、スレッド数がどれだけ多いかを確認してください。スレッドが多く、すべてCPUをドロップして競合する場合、コンテキスト切り替えが発生する可能性があります。時にはスレッド数が少ないほど良いです!