![]() |
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.
|
|
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 |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
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) без каких-либо заметных различий. Любая помощь оценку. |
|
||||
|
Вы закрыли DB связи сразу же, когда вы сделали с базой данных или заявлений, ручками т.д.? Если вы работаете ресурс интенсивным сценарий, вы должны убедиться, что вас освободят вещи так быстро, как можно избегать проведения нибудь слишком долго. Вы не должны полагаться на автоматическое справочно-кол сбора мусора в этом случае вполне возможно, что deallocation не может произойти достаточно скоро.
Если у вас возникли переменную с очень большим содержанием, вы должны рассмотреть отключено вручную () переменные, сразу, когда вы сделали с ним. Он не может иметь отношение к вашему делу, а просто попробовать. |
|
||||
|
Извините забыл сказать, я прямо добавил mysql_free_result mysql_close и призывает, чтобы убедиться, что она wasn't. Я попытался сделать
отключено ($ datax); до повторного назначения, и я получаю же "повесить". |
|
||||
|
Не слишком уверены в этом.
На самом деле я сделал простой скрипт: Код:
<?php $ary = range(0, 50000); $newary = $ary; ?> Но вы уверены изменения между PHP4 и PHP5, касающиеся переменная / назначение объекта (копирование) поведение? Поскольку вы не можете предоставить самый простой вариант этого сценария, которые дают поведение, я думаю все упомянутые может быть просто дикого догадываться. |
|
||||
|
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");
?>
Код:
$ 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
$
|
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|