(PHP)phpからlinuxのコマンドを実行したときにかかる負荷について


現在WEB画面のダウンロードボタンを押すと
指定した条件に合致したサーバ内のログを
CSVファイルとして出力する処理をPHPで行っています

サーバ内のログを抽出する際には
下記のようなコマンドをPHPのexec関数を使い実行しています

cat /hoge/logs/*|grep ' Failed '|grep '2008-10-08'|awk '{print $6}'|uniq

上記コマンドはサーバ内から直接実行するとなんなく処理を終えるのですが
PHPから実行すると非常に時間がかかり、サーバに高い負荷がかかってしまいます
(バックグランドで実行すれば負荷はあまりかかりませんが、処理に時間がかかってしまうので考えていません)

これはPHPからコマンドを実行する際の宿命なのでしょうか
もし、負荷を軽減し、処理スピードを上げる方法などありましたら
お教えいただきたいです

よろしくお願いします

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/10/09 18:36:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント60pt

実際に負荷測定をしたわけではないので、以下は推測です――。


PHPは基本的にシングルスレッドなので、外部でパイプ処理させている点で負荷がかかっているのかもしれません。

& でバックグラウンド処理を指定するのが無難だと思うのですが、それを回避したいということでしたら、パイプ処理にしないで、以下のように1つ1つのプロセスに分解して exec してみてはどうでしょう。実際には、一時ファイルの作成場所と削除処理を加える必要があります。

cat /hoge/logs/* >hoge1

grep ' Failed ' hoge1 >hoge2

grep '2008-10-08' hoge3

awk '{print $6}' hoge3 >hoge4

uniq hoge4

id:jayz

回答ありがとうございます

今試しにパイプを取り除いた形で実験してみました

結果は・・・とても早くなりました!

パイプ処理は便利な分負荷が高まるということでしょうか

大変参考になりました

ありがとうございます

2008/10/09 18:35:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません