сессии и "зависание" apache

alpha

Новичок
сессии и "зависание" apache

Вобщем есть проект. который как-то там работает. качаю его на локальный сервак себе. могу пройти 2-5 ссылок по нему, потом зависают все скрипты, где используется session_start(). тоесть в броузере написано: соединение с localhost. скрипт по таймауту не отваливается. Там где сессии не используются - все нормально работает. файл сессии у проекта - обычный. весит 3 кб.
апач на d:\. tmp для сессий c:/windows/temp/. сижу под админом. места и там и там по 80 гиг.
нигде на файлы сессии никакого изменения прав вроде нету в проекте.

+ведь apache ж вроде должен паралельно обрабатывать запросы?
Тоесть когда происходит "зависание" запускаю на проверку 2 тестовых скрипта
PHP:
1.php
<?php
session_start();
echo 1;
?>
PHP:
2.php
<?php
echo 1;
?>
2.php работает, 1.php "висит"
apache 2.2.4, php 5.2.5.
 

Ermitazh

Новичок
а что говорит вывод ошибок?

-~{}~ 04.01.08 17:38:

наверноe headers already sent...?
 

alpha

Новичок
Он ничего не говорит, т.к. в броузере вылазит "ожидание ответа с localhost". И так при обращении к любому скрипту где используются сессии. Там где не используются - все соединяется и отрабатывает нормально. Тоесть при зависании, если открыть в новых окнах
1.php
<?php
session_start();
echo 1;
?>

2.php
<?php
echo 1;
?>
2.php работает, 1.php "висит"
 

dimagolov

Новичок
логи ошибок php смотрел? уровень ошибок какой?

зависает не апач, а скрипт, вернее он умирает не обрывая соединения или что-то типа делает до посинения.
 

alpha

Новичок
ini_set('display_errors', 'on');
error_reporting ( E_ALL );
лог ошибок - пуст :( по-моему до него очередь не доходит :) ведь после "зависания" от проекта висит даже скрипт
<?php
session_start();
echo 1;
?>

-~{}~ 04.01.08 18:02:

Автор оригинала: dimagolov
логи ошибок php смотрел? уровень ошибок какой?

зависает не апач, а скрипт, вернее он умирает не обрывая соединения или что-то типа делает до посинения.
а с чем он может держать соединение, что б это влияло на сессии? :(
 

Gas

может по одной?
похоже на:
session data is locked to prevent concurrent writes only one script may operate on a session at any time.
http://php.net/manual/en/function.session-write-close.php

то-есть, какой-то скрипт, в котором используются сессии слишком долго выполняется и лочит файл с сессией, остальные запросы с тем же sid'ом ждут release lock'а.
Попробуй почистить куки и запустить тестовый скрипт с session_start() с другим sid'ом - если не тупит, в этом дело.
 

alpha

Новичок
Gas, спасибо. С другим сидом стартовал файл.
но я не пойму чем может лочится файл сессии? .htaccess'ом все кидается на index.php, а он же вроде как отрабатывает нормально. никаких задержек.
тоесть я вообще-то говоря не совсем понимаю КАК может лочится файл сессии. Ведь он используется только одним скриптом.

и почему залоченный файл одной сессии не дает работать другим, с другими именами
 

alpha

Новичок
*****, тогда задам вопрос по другому. если скрипт отработал, то может ли он оставить залоченной сессионный файл? И почему.

session_write_close(); в конце скрипта не помогает.
 

alpha

Новичок
FractalizeR что за управление если скрипт отработал. просто окзалось что я не совсем понимаю механизм работы пхп с сессией.
 

Фанат

oncle terrible
Команда форума
механизм простой. когда сессия стартует - файл лочится. когда сессия завершается - файл освобождается.
если у тебя файл заблокирован (а ты уже убедился, что именно сессией?) значит - какой-то скрипт исполняется долго.

и вместо того, чтобы здесь нам рассказывать, что ничего не помогает, надо идти и искать этот скрипт
 

Gas

может по одной?
alpha
боюсь, врядли мы угадаем в чём дело. может есть какие-то скрытые фреймы или "скрипт который отработал" возвращает в html'е ссылки на внешние ресурсы, которые обрабатываются index.php и в них затык. Мы этого не знаем.
 

alpha

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

asaka

Новичок
Господа, добрый день!
Та же самая проблема.

Проверял на тестовом примере.
На индексной страничке пишешь три ссылки с id = 1,2,3.
По получаемым ID делаю запрос запрос к БД. (оракл)
Еденичка считает около 20 миллионов строк (50 сек.)
Двойка выводит дату запросом (select sysdate from dual) (0.001 сек.)
Тройка делает группированный запрос из 10 миллионов строк(40 сек.)

Если подряд покликать на ссылочки и открыть их в фоновом окне, допустим в опере, то все чудесненько отрабатывает. Первым заканчивается считаться запущенный скрипт с параметром id = 2, затем 3, потом 1.

Это тестовый скрипт, который по большому счету отличается от рабочего наличием авторизации, а точнее функцией session_start();

Но стоит в этот тестовый скрипт вставить в начало эту функцию, так все идет наперекосяк. Так же прокликав по линкам, получаем "висюки". Все три свежеоткрытх окна замораживаются сроком на 30 секунд (ну собстно что в php.ini прописанно), потом отлетают с надоевшей ошибкой "Fatal error: Maximum execution time of 30 seconds exceeded in D:\usr\local\www\ora\index.php on line 9". Строка 9 - это следующая строка с кодом после session_start();

Автор оригинала: *****
если у тебя файл заблокирован (а ты уже убедился, что именно сессией?) значит - какой-то скрипт исполняется долго.
Могу я сделать вывод что файл заблокирован именно сессией? Исполняется скрипт долго, да, это запросы, тяжелые и грузные. Проблему о предварительной агрегации данных не обсуждать, пожалуйста. Это сделанно уже. Есть запросы, которые должны "лопатится" долгое время.

Какие идеи у кого есть? Сам я уж голову сломал. Прошу о помощи специалистов.

-~{}~ 10.04.08 22:22:

Что-т вместо имени Ф.А.Н.А.Т у меня звездочки рисуются ( это фишка тчоль такая на форуме? Извиняюсь за оффтоп
 

Фанат

oncle terrible
Команда форума
Какие идеи у кого есть? Сам я уж голову сломал. Прошу о помощи специалистов.
Если из предыдущего обсуждения никаких идей не возникло, то у специалистов помощи просить тем более бесполезно.
 

asaka

Новичок
Автор оригинала: *****
Если из предыдущего обсуждения никаких идей не возникло, то у специалистов помощи просить тем более бесполезно.
Все-таки есть специалисты!
Решение нашел в блоге у некого CDS.
Если короче, то он предлагает убивать сессию на время долгих операций и потом восстанавливать ее. То бишь примерно так
PHP:
session_write_close();
... Запуск внешней программы/просчета/запроса к БД...
@session_start();
Глюк свзяан с системами под винду, так как он предполагает, что под никсами таких проблем нет. Проверить не могу.
Но все же, решение мне помогло :) Теперь все летает как и без сессий.

Правда есть вопрос. Если "выкручиваться" таким образом, то не возникнет ли других проблем? Ну так, на вскидку :)
 

asaka

Новичок
грубовато :)
хотел услышать мнение форумной элиты... услышал :)
Ну да ладно... всем спасибо.
Удачи!
 
Сверху