вести с грабельных полей,
Aug. 22nd, 2012 11:31 amПериод смешных ошибок с неожиданными последствиями.
Не моя: в pidfile пишется просто число - PID, ничем не терминируется, файл предварительно (или после) не зачищается. Работало под pid=12347, запущен новый с pid=3642, в pidfile оказалось 36427.
Моя: в кластере живут данные, реплицирующиеся между нодами, но функция вычистки устаревших данных не доработана. Запускается узел, пытается одновременно добавить новую запись истории о своём запуске и синхронизироваться с остальными, умирает под тяжестью данных и приложений (не хватает виртуальной памяти), но остальные, кто ещё жив, запомнили этот запуск. Запускается заново, ещё добавляет, снова умирает... Когда нашли и идентифицировали проблему, уже вычитка базы с другого узла оказывалась слишком тяжёлой и рвала синхронизацию в кластере. Пришлось полностью погасить сервис динамических данных, чтобы остановить размножение мусора.
Пока не знаю, какие выводы тут делать.
Не моя: в pidfile пишется просто число - PID, ничем не терминируется, файл предварительно (или после) не зачищается. Работало под pid=12347, запущен новый с pid=3642, в pidfile оказалось 36427.
Моя: в кластере живут данные, реплицирующиеся между нодами, но функция вычистки устаревших данных не доработана. Запускается узел, пытается одновременно добавить новую запись истории о своём запуске и синхронизироваться с остальными, умирает под тяжестью данных и приложений (не хватает виртуальной памяти), но остальные, кто ещё жив, запомнили этот запуск. Запускается заново, ещё добавляет, снова умирает... Когда нашли и идентифицировали проблему, уже вычитка базы с другого узла оказывалась слишком тяжёлой и рвала синхронизацию в кластере. Пришлось полностью погасить сервис динамических данных, чтобы остановить размножение мусора.
Пока не знаю, какие выводы тут делать.
no subject
Date: 2012-08-22 02:56 pm (UTC)no subject
Date: 2012-08-23 04:38 am (UTC)http://groups.google.com/group/fido7.ru.unix.prog/browse_thread/thread/551b8b584a43ea6c/d2032971ec69a1e8
Проблема в том, что "сделать себе лимит памяти" требует специального ядерного механизма, которого не дают.
no subject
Date: 2012-08-23 04:56 am (UTC)На фре есть RLIMIT_VMEM (vmemoryuse): /* virtual process size (inclusive of mmap) */, оно же RLIMIT_AS (это же имя упоминалось в контексте линукса в обсуждении в ru.unix.prog).
no subject
Date: 2012-08-29 08:24 am (UTC)Видимо, плохо прочитал. Потому что суть как раз проигнорировал.
> Если в OS не даёт методов (например, лимиты в Linux не работают?)
При чём тут вообще лимиты в нынешнем виде? Они срабатывают только при их переполнении, и уже в том месте, где попросили ресурс. А если этот запрос неявный (например, copy-on-write страницы), то и сообщить о проблеме невозможно. Надо делать так, чтобы она опознавалась заранее. А теперь покажи, как мне подсчитать лёгким образом (без залазания в /proc/$pid/), какой текущий объём VM процесса и сколько осталось до исчерпания лимита?
> Если даёт методы, надо ими активно пользоваться.
Если бы она давала методы - всё было бы хорошо. Но она ни хрена не даёт.
> На фре есть RLIMIT_VMEM
Ровно настолько же бесполезная хня.
no subject
Date: 2012-08-29 11:19 am (UTC)> как мне подсчитать лёгким образом (без залазания в /proc/$pid/), какой текущий объём VM процесса и сколько осталось до исчерпания лимита
Не знаю, но это не критично - когда лимит исчерпается, тебе система об этом скажет и ты просто откатишь транзакцию, используя резервную память.
no subject
Date: 2012-08-30 06:20 am (UTC)Это лимиты 1 (прописью: одного) процесса. Уже лимиты группы процессов, а тем более фактический лимит всей системы, не может заранее ограничить расширение по copy-on-write.
> Не знаю, но это не критично - когда лимит исчерпается, тебе система об этом скажет и ты просто откатишь транзакцию, используя резервную память.
Отлично! Покажи мне, где этот механизм работает уже сейчас.
no subject
Date: 2012-08-30 06:41 am (UTC)Зачем?
> а тем более фактический лимит всей системы, не может заранее ограничить расширение по copy-on-write.
Зачем системе иметь какой-то лимит? Своп же можно наращивать динамически, а в перспективе и RAM.
no subject
Date: 2012-08-30 06:42 am (UTC)> Отлично! Покажи мне, где этот механизм работает уже сейчас.
Все методы выделения (виртуальной) памяти предусматривают отказ и возврат ошибки, я не понимаю проблемы.