Точного ответа у меня нет, но есть жизненный пример.
Некий сетевой сервис, который должен работать 24/7/365 пришлось перестартовывать по cron раз в сутки, иначе он раз в несколько месяцев при всплеске нагрузки терял файловые дескрипторы сокетов (или пайпов) и переставал работать.
Какой именно модуль тут оказался кривым — сказать сложно, из специфики могу сказать, что интенсивно использовались DBI (MySQL), LWP::Simple, локальные сокеты и fork().
С другой стороны, ещё на Perl 5.005 в каких-то лохматых годах я написал специфичный web-сервер, который именно работал круглосуточно и без перезапусков месяцами и годами — его аптайм всегда был равен аптайму сервера.
Как настоящий гик, наверно, я должен был кинуться и найти, что именно и куда утекает, но ежедневные задачи не дали мне этого сделать :) или попросту было лень :)
Если опустить шелуху, автора предлагает использовать какого-то странного вида RLE, применённого к битам.
Не хочется его огорчать, но аналог RLE применяется для пред-обработки данных перед сжатием довольно часто.
К сожалению, при использовании модулей с cpan приложение резко теряет в мобильности.
Поэтому если к скрипту главное требование — чтобы он работал везде, где его запустят, cpan с собой уже таскать не стоит.
Кроме этого, при апгрейде системы скомпилированные модули могут поломаться и всё придётся пересобирать, всё это связанно с проблемами при поддержке.
А с бандлами в perl, к сожалению, до сих пор не всё гладко.
Этот скрипт — абсолютно переносим.
В этом его главное преимущество.
Недостатки тоже есть и они известны.
Ну а насчёт течки по памяти… к сожалению, в perl текут и более насущные места кроме eval.
Интересная штука, спасибо.
Когда я делал тот веб-сервис, perl был ещё 5.005, ничего такого не было.
Если буду делать что-то для web, посмотрю на Mojolicious в первую очередь.
В теории да.
На практике это происходит не всегда.
В другой (версии) ОС — немного другие версии тех же приложений и конфиги у них иногда немного отличаются. Причём, совместимость вперёд иногда настолько относительна, что проще снести и настроить заново, чем искать, какая настройка переехала в какую секцию и от какой буквы зачитка конфига рушит новое приложение.
Всё зависит от аккуратности разработчиков конкретного приложения.
Мне, например, опять предстоит апгрейд и я трусливо оттягиваю этот день :)
А ведь ещё есть и системные настройки, которые лежат, в основном, в /etc, /var, /usr/local и хз ещё где.
Впрочем… всё это — приятные хлопоты по сравнению с переинсталляцией винды и переносом рабочего окружения там :) слава богу, есть что вспомнить.
Это я всё к тому, что прозрачная и безболезненная переинсталляция системы простым сохранением /home не решается.
При подаче заявки через сайт чеку появиться физически неоткуда.
Но даже если приехать ногами в тот же руцентр, дают довольно смешную (с точки зрения закона) бумажку.
Доменные споры пока у нас решаются в индивидуальном порядке, т.е. заранее результат предсказать тяжело.
Так можно сказать, но обычно приходится использовать то, что уже стоит на сервере.
Качают и ставят — когда совсем нечем заменить. или нечем заняться 8)
Для WAV, AVI, EXE (и многих подобных chunked-форматов) есть гораздо более секретный способ: хранить свои данные между чанками. Там во всех заголовках указаны смещения к полезным данным. Данные можно отодвинуть, а после заголовка положить что надо.
1. У htop в настройках (F2) полезно включить вообще все виды раскраски, которые там есть — появляется дополнительная полезная инфа.
2. Нет ли подобной подборки по смежной теме всяких статусо-статистико-мониторилок типа iostat, vmstat, sar и прочих?
Некий сетевой сервис, который должен работать 24/7/365 пришлось перестартовывать по cron раз в сутки, иначе он раз в несколько месяцев при всплеске нагрузки терял файловые дескрипторы сокетов (или пайпов) и переставал работать.
Какой именно модуль тут оказался кривым — сказать сложно, из специфики могу сказать, что интенсивно использовались DBI (MySQL), LWP::Simple, локальные сокеты и fork().
С другой стороны, ещё на Perl 5.005 в каких-то лохматых годах я написал специфичный web-сервер, который именно работал круглосуточно и без перезапусков месяцами и годами — его аптайм всегда был равен аптайму сервера.
Как настоящий гик, наверно, я должен был кинуться и найти, что именно и куда утекает, но ежедневные задачи не дали мне этого сделать :) или попросту было лень :)
Кстати, если внимательно посмотреть на «идею», окажется, что результирующий поток — всего лишь инвертирован и сдвинут вправо на один бит.
Архиваторам это должно сильно помочь :)
Вообще, с битами возиться довольно глупо — архиваторы сжимают байты.
Не хочется его огорчать, но аналог RLE применяется для пред-обработки данных перед сжатием довольно часто.
Продолжения, видимо, не будет т.к. уже в результате этого поста я уже ничего писать не могу.
Надо было написать про айфон :)
К сожалению, при использовании модулей с cpan приложение резко теряет в мобильности.
Поэтому если к скрипту главное требование — чтобы он работал везде, где его запустят, cpan с собой уже таскать не стоит.
Кроме этого, при апгрейде системы скомпилированные модули могут поломаться и всё придётся пересобирать, всё это связанно с проблемами при поддержке.
А с бандлами в perl, к сожалению, до сих пор не всё гладко.
Этот скрипт — абсолютно переносим.
В этом его главное преимущество.
Недостатки тоже есть и они известны.
Ну а насчёт течки по памяти… к сожалению, в perl текут и более насущные места кроме eval.
Когда я делал тот веб-сервис, perl был ещё 5.005, ничего такого не было.
Если буду делать что-то для web, посмотрю на Mojolicious в первую очередь.
На практике это происходит не всегда.
В другой (версии) ОС — немного другие версии тех же приложений и конфиги у них иногда немного отличаются. Причём, совместимость вперёд иногда настолько относительна, что проще снести и настроить заново, чем искать, какая настройка переехала в какую секцию и от какой буквы зачитка конфига рушит новое приложение.
Всё зависит от аккуратности разработчиков конкретного приложения.
Мне, например, опять предстоит апгрейд и я трусливо оттягиваю этот день :)
А ведь ещё есть и системные настройки, которые лежат, в основном, в /etc, /var, /usr/local и хз ещё где.
Впрочем… всё это — приятные хлопоты по сравнению с переинсталляцией винды и переносом рабочего окружения там :) слава богу, есть что вспомнить.
Это я всё к тому, что прозрачная и безболезненная переинсталляция системы простым сохранением /home не решается.
Но даже если приехать ногами в тот же руцентр, дают довольно смешную (с точки зрения закона) бумажку.
Доменные споры пока у нас решаются в индивидуальном порядке, т.е. заранее результат предсказать тяжело.
Качают и ставят — когда совсем нечем заменить. или нечем заняться 8)
Часто бывает проще написать
$ flock -n /tmp/lock -c mycommand || echo Failчем что-то качать, собирать и ставить.
для BSD пойдёт :)
Второе — уже утилита.
функций даже побольше, есть в стандартных конфигурациях в линуксе
2. Нет ли подобной подборки по смежной теме всяких статусо-статистико-мониторилок типа iostat, vmstat, sar и прочих?