The UNIX and Linux Forums  
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.

Go Back   В UNIX и Linux Форумы > Топ форумы > Shell программирование и сценарии
.
Google unix.com



Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь.

Подробнее UNIX и Linux Темы форума можно найти полезные
Нить Резьба для начинающих Форум Ответы Последнее сообщение
выходе из скрипта arghya_owen Shell программирование и сценарии 1 06-02-2008 07:36 AM
Выход из сценария, когда ошибка возникает Sreejith_VK Shell программирование и сценарии 4 04-25-2008 04:53 AM
Сценарий не выход??? lesstjm Shell программирование и сценарии 1 07-11-2007 12:58 PM
Shell скрипт не покинул грациозно smithK Shell программирование и сценарии 5 02-08-2007 06:48 PM
удалились в C ruffenator Программирования высокого уровня 3 04-28-2002 03:31 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered By Powered by Google
 
LinkBack Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 05-10-2007
Неверующий Unbeliever is offline
Зарегистрированный пользователь
  
 

Регистрация: Jul 2005
Место проведения: Англия
Сообщений: 183
PHP5 Сценарист 'заморозить', прежде чем покинуть его

Я недавно усовершенствовали систему с PHP 4.4.2 с PHP 5.2.1, и один из моих сценариев начал вести себя очень странно. Я попытался, но Google разработать пустыми до сих пор.

В основном то, что скрипт делает это выбрать большой объем данных из MySQL (4.1.21) базу данных, сделать некоторые манипуляции, участков граф (с использованием jpgraph 2.2). Я удалены все jpgraph код, и я все еще получаю проблемы. Что произойдет, это скрипт 'висит' в течение определенного периода времени после выполнения последней команды PHP до фактического выхода. В течение этого периода времени, этот процесс занимает большое количество процессорного времени (всего один процессор в основном), но если вы ферменных процесса вы получите не вывод, пока он, наконец, выход (если вы видите STDIN / Out / ERR закрыты и т.д.).

После сдачи различные заявления в отладочной я обнаружил, что если бы я прокомментировал в следующей строке скрипта не висит, прежде чем покинуть его.

datax $ \u003d $ newdatax;

А довольно безобидным линии. На данный момент $ datax является большой массив (многие тысячи ценностей долго), а $ newdatax массив с результатами парсинга оригинальный $ datax определенным образом (в основном, в случае принятия каждый n-й элемент из $ datax). На данный момент я хотел бы отбрасывать оригинальный $ datax и заменить его новым $ newdatax и я хотел бы сделать больше maniplulation позже.

Если $ datax составляет около 10000 строк или так есть заметные повесить когда сценарий выхода на 50000 строк о повесить более 20 секунд. В соответствии с PHP 4 у меня не было никаких проблем с этим кодом, когда было зарегистрировано более 200,000 строк в массиве.

Даже если я просто изменить эту строку

$ datax \u003d Array ();

Я получаю аналогичный (но гораздо меньше) 'повесить' перед сценарием выходов и $ datax массив должен быть достаточно большой, прежде чем он станет заметным.

Система работает на Solaris 9 на v480 с 4 процессорами и 16GB памяти. Я пробовал и без Zend optimiser (v3.2.8) без каких-либо заметных различий.

Любая помощь оценку.
Old 05-10-2007
cbkihong cbkihong is offline Forum Advisor  
Советник
  
 

Регистрация: Sep 2002
Место проведения: Гонконг, Китай
Сообщения: 1,624
Вы закрыли DB связи сразу же, когда вы сделали с базой данных или заявлений, ручками т.д.? Если вы работаете ресурс интенсивным сценарий, вы должны убедиться, что вас освободят вещи так быстро, как можно избегать проведения нибудь слишком долго. Вы не должны полагаться на автоматическое справочно-кол сбора мусора в этом случае вполне возможно, что deallocation не может произойти достаточно скоро.

Если у вас возникли переменную с очень большим содержанием, вы должны рассмотреть отключено вручную () переменные, сразу, когда вы сделали с ним. Он не может иметь отношение к вашему делу, а просто попробовать.
Old 05-10-2007
Неверующий Unbeliever is offline
Зарегистрированный пользователь
  
 

Регистрация: Jul 2005
Место проведения: Англия
Сообщений: 183
Извините забыл сказать, я прямо добавил mysql_free_result mysql_close и призывает, чтобы убедиться, что она wasn't. Я попытался сделать

отключено ($ datax);

до повторного назначения, и я получаю же "повесить".
Old 05-10-2007
cbkihong cbkihong is offline Forum Advisor  
Советник
  
 

Регистрация: Sep 2002
Место проведения: Гонконг, Китай
Сообщения: 1,624
Не слишком уверены в этом.

На самом деле я сделал простой скрипт:

Код:
<?php

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

?>
Поэтому я присваивая 50001-элемент массива в другую переменную. Там, как представляется, не будет каких-либо вопрос по скорости моего PHP 5.2.0. Это всего лишь рабочий стол системы.

Но вы уверены изменения между PHP4 и PHP5, касающиеся переменная / назначение объекта (копирование) поведение? Поскольку вы не можете предоставить самый простой вариант этого сценария, которые дают поведение, я думаю все упомянутые может быть просто дикого догадываться.
Old 05-10-2007
Неверующий Unbeliever is offline
Зарегистрированный пользователь
  
 

Регистрация: Jul 2005
Место проведения: Англия
Сообщений: 183
Ok я код вниз до самой маленькой, и я могу еще показать вам, что происходит. В include.php просто databsae соединения деталей. С данными я запрос возвращает 53068 строк. Вы вызова скрипта с аргументом 0, 1 или 2 для использования в 3 различных запросов (на 2, 3 или 4 всего колонках возвращены). С 0 или 1, скрипт завершает immedaitely после печати 'Выход', 2 есть 18-20 секунд.

В колонках вернулись являются:

Дата: дата и время
r_per_sec: с плавающей точкой Нумер
b_workers: целочисленное
I_workers: целочисленное

Если я закомментировать одну из трех линий помеченные "* ключевых *", то скрипт завершает немедленно.

Код:
<?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");
?>
Ouput из моей системе при запуске этого скрипта в 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

Закладки

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 08:04 PM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0