![]() |
Helloやアメリカ合衆国へようこそ! UNIXおよびLinuxフォーラム!訪問し、当社のグローバルコミュニティに参加いただきありがとうございます。
|
|
Googleのunix.com
|
|||||||
| シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。 |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| スクリプトからの終了 | arghya_owen | シェルプログラミングとスクリプティング | 1 | 2008年6月2日 06:36午前 |
| スクリプトからの終了時にエラーが発生します | Sreejith_VK | シェルプログラミングとスクリプティング | 4 | 2008年4月25日 03:53午前 |
| スクリプトが終了されていないか? | lesstjm | シェルプログラミングとスクリプティング | 1 | 2007年7月11日 11:58午前 |
| シェルスクリプトを正常に終了しない | smithK | シェルプログラミングとスクリプティング | 5 | 2007年2月8日 06:48午後 |
| のC終了 | ruffenator | 高レベルのプログラミング | 3 | 2002年4月28日 02:31午前 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 | スレッドを評価 | 表示モード |
|
|
|
||||
|
PHP5のスクリプトを終了する前に、 '凍結'
私は最近のPHPはPHP 4.4.2から5.2.1にアップグレードするためのシステムとは私のスクリプトは非常に不思議な行動を開始しました。私はGoogleのこれまでのところをみたことがあるが、空白になる。
基本的には、スクリプト)は、いくつかの操作を行うデータベースはMySQL ( 4.1.21からの多量のデータを選択している場合、グラフ( jpgraph 2.2 )は、プロットを使用しています。私は、すべてのコードが削除jpgraphはまだこの問題を得ています。何が起こるのかは、スクリプト'が'が一定期間、実際に終了する前に最後のPHPコマンドを実行後にハングアップする。時間のプロセスがCPU時間(全体の1つのプロセッサのほとんど)を大量にまで最終的に終了するまで出力を得る場合はこの期間中のプロセストラス( STDINハンドルを参照するとき/出力/エラーメッセージなど)を閉鎖した。 私の様々なデバッグ文を入れ後に発見された場合、ハングアップしませんでしたが、スクリプトを終了する前に次の行をコメントアウト。 $ datax \u003d $ newdatax ; かなり無難なライン。この時点で大規模な配列ですdatax $ dataxドルからN番目のエントリをすべての(ほとんどの場合)は、元の$ datax何らかの形での解析からの結果との値の(何千人もの長い) 、 $ newdatax配列。私は元の$ datax捨てるし、新しい$ newdataxに置き換えると後でもっとmaniplulation行うこの時点で希望することができます。 $ datax場合は約10000ほどの行がハングアップ時にハング50000行のスクリプトを終了すると、 20秒を超えている顕著です。私はこのコードでは問題がある場合は、アレイ内の20万行以上のPHP 4の下に出されていた。 私だけでは、たとえラインに変更 $ datax \u003d配列( ) ; 顕著になる前に、私は、スクリプトを終了し、 $ datax配列の前に(ただし、多くの) '小さいハング'同様のかなりの大きさが必要です。 システム上のSolaris 9を実行しているv480 4プロセッサと最大16GBのRAMを搭載。私が試していると顕著な差では、 Zend optimiser ( v3.2.8 ) 。 任意の手助けは大歓迎。 |
|
||||
|
すぐにしたときなどは、データベースまたはステートメントハンドルは、 DB接続が閉じていることがありますか?集約型の場合は、スクリプトのリソースを実行している、として保持することができますが長すぎるために何を回避するためのものをすぐに解放することを確認する必要があります。場合は、自動的に参照カウントに依存しないでくださいガベージコレクションは、このような場合には十分早く解除されないことがありますが発生することが可能です。
非常に大規模な内容を含む場合は、変数がある場合、手動で解除を検討する必要があります( )は変数のときにはすぐに行われています。それはあなたが関連することができない場合にはお試しください。 |
|
||||
|
ていないことについても確認します。
実際に私は、簡単なスクリプトでは: コード:
<?php $ary = range(0, 50000); $newary = $ary; ?> しかし、 PHP4と変数について、 PHP5の間の変更点を確認している/オブジェクトを代入( )の動作をコピーするか?の場合は、スクリプトの簡単なバージョンを提供することはできませんが、私はすべての言及を推測することができるだけ当てずっぽうの動作を提供します。 |
|
||||
|
私は下のコードを持って[ OK ]を、私はまだ何が起きている場合を示すことができると最小について。 include.php単にdatabsaeの接続の詳細をしています。と私は、 53068行のデータのクエリを返します。あなたが返さ) 1または2の3種類のクエリを2 、 3または4 (全列を使用するには、引数が0には、スクリプトを呼び出します。を0または1のスクリプトimmedaitely印刷'終了' 、 2にある18から20秒の遅延後に終了します。
の列が返されます: 日付:日付/時刻スタンプ r_per_sec :浮動小数点numer b_workers :整数 I_workers :整数 もし私が3行のいずれかをコメントに" *キーライン* "して、スクリプトをすぐに終了となった。 コード:
<?php
function my_log($message)
{
$date = date("H:i:s");
print ("$date: $message\n");
}
my_log("Script Starting");
include "include.php";
# Connect to and select database
$db = mysql_connect("$hostname", "$username", "$password");
mysql_select_db($database);
# Metrics array to replace all the code which worked out the metrics
# query variable to replace all the code which worked out the SQL
if ($argv[1] == "0")
{
$metrics[0] = array ("apollo_APACHE_external.r_per_sec");
$query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0 FROM apollo_APACHE_external WHERE apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
elseif ($argv[1] == "1")
{
$metrics = array ("apollo_APACHE_external.r_per_sec", "apollo_APACHE_external.b_workers");
$query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0,apollo_APACHE_external.b_workers AS c1 FROM apollo_APACHE_external WHERE apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
elseif ($argv[1] == "2")
{
$metrics = array ("apollo_APACHE_external.r_per_sec", "apollo_APACHE_external.b_workers", "apollo_APACHE_external.i_workers");
$query = "SELECT DATE_FORMAT(apollo_APACHE_external.date,\"%d/%m/%y %H:%i\") AS mydate,apollo_APACHE_external.r_per_sec AS c0,apollo_APACHE_external.b_workers AS c1,apollo_APACHE_external.i_workers AS c2 FROM apollo_APACHE_external WHERE apollo_APACHE_external.date >= 20040101000000 AND apollo_APACHE_external.date <= 20040930230000 ORDER BY apollo_APACHE_external.date";
}
else
{
exit;
}
my_log("executing Query");
$result = mysql_query($query);
my_log ("Number of results:" . mysql_num_rows($result));
$count=0;
my_log("Fetching Results");
while ($row = mysql_fetch_array($result))
{
# Build the x axis data
$datax[$count] = $row[mydate]; # *KEY LINE*
# Build the y axis data
for ($i=0; $i < count($metrics); $i++)
{
$datay[$i][$count] = $row["c$i"]; # *KEY LINE*
}
$count++;
}
my_log("Freeing result set");
mysql_free_result($result);
my_log("Closing DB connection");
mysql_close($db);
my_log("Done");
# First do the X axis points
$newdatax = array();
# Reassign newdatax back to datax
$datax = $newdatax; # *KEY LINE*
my_log("Exiting");
?>
コード:
$ php -v
PHP 5.2.1 (cli) (built: May 3 2007 11:15:31)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.2.8, Copyright (c) 1998-2007, by Zend Technologies
$ php plot_graph.php 2; date
16:27:59: Script Starting
16:27:59: executing Query
16:28:01: Number of results:53068
16:28:01: Fetching Results
16:28:03: Freeing result set
16:28:03: Closing DB connection
16:28:03: Done
16:28:03: Exiting
Thu May 10 16:28:22 BST 2007
$ php plot_graph.php 1; date
16:28:37: Script Starting
16:28:37: executing Query
16:28:39: Number of results:53068
16:28:39: Fetching Results
16:28:41: Freeing result set
16:28:41: Closing DB connection
16:28:41: Done
16:28:41: Exiting
Thu May 10 16:28:41 BST 2007
$ php plot_graph.php 0; date
16:28:45: Script Starting
16:28:45: executing Query
16:28:47: Number of results:53068
16:28:47: Fetching Results
16:28:48: Freeing result set
16:28:48: Closing DB connection
16:28:48: Done
16:28:48: Exiting
Thu May 10 16:28:48 BST 2007
$
|