The UNIX and Linux Forums  
Helloやアメリカ合衆国へようこそ! UNIXおよびLinuxフォーラム!訪問し、当社のグローバルコミュニティに参加いただきありがとうございます。

Go Back   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午前

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek を搭載 Powered by Google
 
LinkBack スレッドツール このスレッドを検索 スレッドを評価 表示モード
  #1固定リンク)  
Old 2007年5月10日
不信心者 Unbeliever is offline
登録ユーザー
  
 

参加日: 2005年7月
場所:イングランド
投稿数: 183
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 ) 。

任意の手助けは大歓迎。
  #2固定リンク)  
Old 2007年5月10日
cbkihong cbkihong is offline Forum Advisor  
アドバイザ
  
 

参加日: 2002年9月
場所:香港、中国
投稿数: 1,624
すぐにしたときなどは、データベースまたはステートメントハンドルは、 DB接続が閉じていることがありますか?集約型の場合は、スクリプトのリソースを実行している、として保持することができますが長すぎるために何を回避するためのものをすぐに解放することを確認する必要があります。場合は、自動的に参照カウントに依存しないでくださいガベージコレクションは、このような場合には十分早く解除されないことがありますが発生することが可能です。

非常に大規模な内容を含む場合は、変数がある場合、手動で解除を検討する必要があります( )は変数のときにはすぐに行われています。それはあなたが関連することができない場合にはお試しください。
  #3固定リンク)  
Old 2007年5月10日
不信心者 Unbeliever is offline
登録ユーザー
  
 

参加日: 2005年7月
場所:イングランド
投稿数: 183
申し訳ないことを忘れて、私は明示的に追加するmysql_free_resultとmysql_close呼び出してwasn'tていることを確認。僕が付き合ってみたことがある

解除( $ datax ) ;

再割り当てて、それまで私は、 ' 'ハング同じなる。
  #4固定リンク)  
Old 2007年5月10日
cbkihong cbkihong is offline Forum Advisor  
アドバイザ
  
 

参加日: 2002年9月
場所:香港、中国
投稿数: 1,624
ていないことについても確認します。

実際に私は、簡単なスクリプトでは:

コード:
<?php

$ary = range(0, 50000);
$newary = $ary;

?>
だから、他の変数への代入50001要素の配列です。何か速度を問題にしていないようです私はPHP 5.2.0 。ただのデスクトップシステム。

しかし、 PHP4と変数について、 PHP5の間の変更点を確認している/オブジェクトを代入( )の動作をコピーするか?の場合は、スクリプトの簡単なバージョンを提供することはできませんが、私はすべての言及を推測することができるだけ当てずっぽうの動作を提供します。
  #5固定リンク)  
Old 2007年5月10日
不信心者 Unbeliever is offline
登録ユーザー
  
 

参加日: 2005年7月
場所:イングランド
投稿数: 183
私は下のコードを持って[ 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");
?>
私のシステムから出力時に上記のスクリプトを実行する3回:

コード:
$ 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
$
Closed Thread

ブックマーク

スレッドツール このスレッドを検索
このスレッドを検索

高度な検索
表示モード このスレッド
このスレッド

投稿ルール
あなた ことができない。 新しいスレッドを投稿
あなた ことができない。 返信の投稿
あなた ことができない。 添付ファイルの投稿
あなた ことができない。 自分の投稿を編集

BBコード なる 〜の上に
スマイリー なる 〜の上に
[イメージ] コードは 〜の上に
HTMLコードは、 オフ
トラックバック なる 〜の上に
ピングバック なる 〜の上に
Refbacks なる 〜の上に




すべてGMT -4です。現在の時刻は 02:57午前


提供: vBulletin、著作権© 2000 - 2006、Jelsoft企業株式会社。言語翻訳による電源
vBCredits v1.4著作権© 2007 - 2008 、 PixelFXスタジオ
は、 UNIXおよびLinuxフォーラムのコンテンツ著作権© 1993 〜 2009 。すべての権利を管理しReserved.Ad RedTyger

コンテンツ関連のURLで vBSEO 3.2.0