127.0.0.1
С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557
|
Добавлено: 04/06/08 в 17:17 |
Ситуация: в /tmp/ скапливаются sess_* нулевого размера, не так что бы быстро, чтобы подозревать что сервер ддосят, но неприятно. ну инодов в /tmp примерно 140к, скорость забивания примерно 1 файл типа sess_ccc3bab6f353a43d1cc67ad2f69eb158 в 3 секунды.
на сервере пицот доров и штук 10 сайтов, из которых как я знаю 2 сайта работают с $_SESSION переменными, 3 сиджа на ST+AT3 и пара wp-блогов.
я ковырял логи и скрипты примерно час, но ничего не нашел, а тем временем в /tmp набилось около тысячи пустых sess_* файлов.
LA показывает допустимые параметры, до 1.5, auth.log молчит, error_log и прочие логи ничего не показывают. вообщем я хз как найти скрипт который дергаются и который генерит sessions.
насколько я понимаю, файл типа sess_d14fb8a1fc4812424689e1f52ef752fd создается когда инитится session_start(), либо включен register_globals, либо как вариант кто-то спамит awstats?
доры точно исключаются, там простой скрипт, задачей которого вычислить ботов и записать в лог, вордпресс-блоги хз, но имхо с сессиями они не работают, а работают с куками, остается либо австатс, либо сиджи
есть конечно подозрение, что какой-нибудь говнобот типа майлру дрочит сайт, но вот уж хз.
apachectl status увы не работает :(
вообщем хелп, рейтинги само собой по максимуму.
|
|
|
|
php
С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410
|
Добавлено: 04/06/08 в 19:08 |
Попробуй сравнить имена сессий в браузере при заходе на сиджи. Методом исключения попробуй. Я больше даже хз что предложить, нада детально смареть. Часть лога можешь выложить?
|
|
|
|
« ... full on ... »
С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686
|
Добавлено: 04/06/08 в 19:48 |
Проверь значение директивы session.auto_start в php.ini, оно должно быть 0. Если оно равно 1, то переуставновка значения в 0 должна решить проблему, если уже стоит 0, то надо копать...
|
|
Power of the lime madness...
|
0
|
|
|
127.0.0.1
С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557
|
Добавлено: 04/06/08 в 20:05 |
Corex писал: | Проверь значение директивы session.auto_start в php.ini, оно должно быть 0. Если оно равно 1, то переуставновка значения в 0 должна решить проблему, если уже стоит 0, то надо копать... |
стоит ноль,
вот секция:
[Session]
session.save_handler = files
session.save_path = /tmp
session.use_cookies = 1
; session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 50
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
|
|
|
|
« ... full on ... »
С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686
|
Добавлено: 04/06/08 в 22:16 |
Ага, значит, скорее всего, проблема в уборщике мусора.
Garbage Collector (сопсна уборщик), работает в PHP по заданной случайности, дабы не грузить сервак. При каждом запросе с заданной вероятностью запускается удаление временных файлов. У тебя в конфиге эта вероятность равна 2% (session.gc_probability/session.gc_divisor = 1/50=2%), т.е. только при каждом 50-м запуске интерпретатора удаляется 1 временный файл сессии (а может и не сессии, а ещё какой-нить временный файл). Короче, если каждый запуск плодит sess_ файл, а удаляется он очень редко, то понятно, откуда набралось такое кол-во файлов.
Первый вариант решения проблемы - сделать вероятность около 100%, файлы будут удаляться все, но будут проблемы с нагрузками.
Вариант второй - просто удалять все лишние файлы, в юниксе можно заюзать tmpwatch, либо написать небольшой шел-скрипт, либо php-скрипт, которые будут сносить устаревшие файлы. Устаревший файл легко определить: взять время его последней модификации, прибавить значение session.gc_maxlifetime (1440 секунд) и удалить всё, что меньше текущей временной метки.
Вроде как одмины примерно так и делают...
|
|
Power of the lime madness...
|
0
|
|
|
127.0.0.1
С нами с 26.04.06
Сообщения: 1092
Рейтинг: 557
|
Добавлено: 05/06/08 в 01:43 |
удалять по шедулеру не проблема
проблема однако в том, что я не знаю кто плодит сессии
|
|
|
|
« ... full on ... »
С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686
|
Добавлено: 05/06/08 в 07:26 |
Какой конкретно скрипт создаёт определённую сессию просто так узнать не получится. В принципе, как ты и написал, любой скрипт, который содержит вызов session_start инициирует создание файла сессии.
Можно попробовать вычислить как предложил _s_[sov] - посмотреть какие скрипты генерят сессии. Вруби в конфиге session.use_trans_sid = 1, у ссылок на сайтах, где стартуют сессии, появятся постфиксы вида PHPSESSID=ccc3bab6f353a43d1cc67ad2f69eb158.
|
|
Power of the lime madness...
|
0
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 07/06/08 в 12:27 |
Ещё как вариант создать для каждого сиджа NAME свой подкаталог /tmp/cjNAME
И вначале скриптов перед вызовом
session_start()
раздать вызовы
session_save_path('/tmp/cjNAME')
Потом смотреть в чьём каталоге бардак. Далее смотреть логи сиджа и т.п.
|
|
|
|