2

コマンドラインでプロセスを実行して、より少ない処理能力を使用する方法を考えています。私が抱えている問題は、プロセスが基本的にCPUを引き継ぎ、MySQLとサーバーの残りの部分を引き継ぐことです。すべてが非常に遅くなっています。

私はnice以前に使用したことがありますが、あまり運がありませんでした。それが答えだとしたら、どのように使いますか?

コマンドを入れることも考えましsleepたが、それでもメモリを使い果たしてしまうので、最善の選択肢ではありません。

別の解決策はありますか?

理由の範囲内で、それがどれだけ長く実行されるかは私には関係ありません。

違いが生じる場合、スクリプトはPHPスクリプトですが、実行にはすでに30分以上かかるため、コマンドラインで実行しています。

編集:プロセスは移行スクリプトであるため、テスト目的で1回実行するだけで実行できるため、最適化にあまり時間をかけたくありません。テストのためだけに、サーバーをほぼ停止させ続けます...そしてそれは共有サーバーです。

4

6 に答える 6

3

プログラムを変更せずに実際にできる最善のことは、niceまたはを使用してnice値を最大値に変更することですrenice。あなたの最善の策は、おそらくプログラムをプロファイリングして、ほとんどの時間を費やしている場所/ほとんどのメモリを使用している場所を見つけ、あなたがやろうとしていることに対してより効率的なアルゴリズムを見つけようとすることです。たとえば、MySQLからの大きな結果セットを操作している場合、結果セット全体をメモリにロードする代わりに、レコードを一度に1つずつ処理したい場合があります。あるいは、クエリまたは結果に対して実行される処理を最適化することができます。

于 2008-11-03T00:52:17.293 に答える
2

19の「niceness」でniceを使用する必要があります。これにより、CPUを待機している他のプロセスがある場合、プロセスが実行される可能性が非常に低くなります。

 nice -n 19 <command>

プログラムにビジー待機がないことを確認し、I/O待機時間を確認します。

于 2008-11-03T00:52:26.937 に答える
1

実際にCPUを使用しているプロセスはどれですか?PHPまたはMySQL?MySQLの場合、「nice」はまったく役に立ちません(サーバーが「nice」されていないため)。

一般にMySQLの場合は、クエリとMySQLのチューニングを調べて、それらのクエリがサーバーを非難している理由を確認する必要があります。

MySQLを介したシステムのプライマリビューの場合、MySQLサーバープロセスを非難すると、「システム全体が遅い」と表示されることがあります。

于 2008-11-03T00:57:46.893 に答える
1

また、コマンド ライン プロセスが IO を集中的に使用するかどうかも考慮する必要があります。一部の Linux ディストリビューションでは、「ionice」コマンドを使用して調整できますが、その使用法は cpu の「nice」コマンドほど単純ではありません。

基本的な使い方:

ionice -n7 コマンド

最も低い優先度で「ベスト エフォート」スケジューラを使用して「cmd」を実行します。使用方法の詳細については、man ページを参照してください。

于 2008-11-03T01:25:28.880 に答える
0

CPUサイクルを単独で使用しても、システムの残りの部分を引き継ぐべきではありません。これを示すには、次のようにします。

while true; do done

これは無限ループであり、取得できるCPUサイクルをできるだけ多く使用します(^ Cで停止します)。あなたはtopそれがその仕事をしていることを確認するために使うことができます。これが、MySQLが停止するまで、システムの全体的なパフォーマンスに大きな影響を与えることはないと確信しています。

ただし、PHPスクリプトが大量のメモリを割り当てている場合、それは確かに違いを生む可能性があります。Linuxは、システムのメモリが不足し始めると、プロセスを強制終了する傾向があります。

解決策を探す前に、問題を絞り込んで原因を確認します。

于 2008-11-03T00:52:04.470 に答える
0

サーバーの興味深いディレクトリ/ファイルシステム/その他をNFS経由で別のマシンにマウントし、そこでスクリプトを実行することができます(これは問題を回避することを意味し、実際には実用的ではありません:|)。

于 2008-11-03T01:01:10.537 に答える