Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6085
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4395
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Как мне изящно закрыть веб-сервер Mongrel
Мое приложение RubyOnRails настроено с обычным пакетом дворняг за конфигурацией Apache. Мы заметили, что использование памяти нашего веб-сервера Mongrel может быть довольно большим при определенных операциях, и мы действительно хотели бы иметь возможность динамически выполнять изящный перезапуск выбранных процессов Mongrel в любое время.
Однако по причинам, которые я не буду здесь вдаваться, иногда может быть очень важно, чтобы мы не прерывали дворняжку, пока она обслуживает запрос, поэтому я предполагаю, что простое убийство процесса не является ответом.
В идеале, я хочу послать дворняге сигнал, который говорит: "закончите все, что вы делаете, а затем прекратите, прежде чем принимать какие-либо дополнительные соединения".
Существует ли стандартная техника или лучшая практика для этого?
Я провел еще немного исследований в источнике Mongrel, и оказалось, что Mongrel устанавливает обработчик сигнала, чтобы поймать стандартный процесс kill (TERM) и сделать изящное завершение работы, так что мне не нужна специальная процедура в конце концов.
Вы можете видеть, как это работает из выходных данных журнала, которые вы получаете, когда убиваете дворнягу, пока она обрабатывает запрос. Например:
** TERM signal received.
Thu Aug 28 00:52:35 +0000 2008: Reaping 2 threads for slow workers because of 'shutdown'
Waiting for 2 requests to finish, could take 60 seconds.Thu Aug 28 00:52:41 +0000 2008: Reaping 2 threads for slow workers because of 'shutdown'
Waiting for 2 requests to finish, could take 60 seconds.Thu Aug 28 00:52:43 +0000 2008 (13051) Rendering layoutfalsecontent_typetext/htmlactionindex within layouts/application
Посмотрите на использование monit. Вы можете динамически перезапустить mongrel на основе использования памяти или CPU. Вот строка из конфигурационного файла, который я написал для своего клиента.
check process mongrel-8000 with pidfile /var/www/apps/fooapp/current/tmp/pids/mongrel.8000.pid
start program = "/usr/local/bin/mongrel_rails cluster::start --only 8000"
stop program = "/usr/local/bin/mongrel_rails cluster::stop --only 8000"
if totalmem is greater than 150.0 MB for 5 cycles then restart # eating up memory?
if cpu is greater than 50% for 8 cycles then alert # send an email to admin
if cpu is greater than 80% for 5 cycles then restart # hung process?
if loadavg(5min) greater than 10 for 3 cycles then restart # bad, bad, bad
if 3 restarts within 5 cycles then timeout # something is wrong, call the sys-admin
if failed host 192.168.106.53 port 8000 protocol http request /monit_stub
with timeout 10 seconds
then restart
group mongrel
Затем вы повторили бы эту конфигурацию для всех ваших экземпляров кластера mongrel. Строка monit_stub - это просто пустой файл, который monit пытается загрузить. Если это не удается, он также пытается перезапустить экземпляр.
Примечание: мониторинг ресурсов, похоже, не работает на OS X с Darwin kernel.
Болотистый:
Если у вас есть один запущенный процесс, он изящно завершит работу (обслуживайте все запросы в своей очереди, которая должна быть только 1, Если вы используете правильную балансировку нагрузки). Проблема в том, что вы не можете запустить новый сервер, пока старый не умрет, поэтому ваши пользователи будут стоять в очереди в подсистеме балансировки нагрузки. То, что я нашел успешным, - это 'cascade' или переходящий перезапуск дворняг. Вместо того, чтобы останавливать их все и запускать их все (поэтому запросы в очереди до тех пор, пока одна дворняжка не будет выполнена, остановлена, перезапущена и принимает соединения), вы можете остановить, а затем запустить каждую дворняжку последовательно, блокируя вызов для перезапуска следующей дворняжки до тех пор, пока не будет создана резервная копия предыдущей (используйте реальную проверку HTTP для контроллера /status). Когда ваши дворняги катятся, только один за раз падает, и вы служите по двум кодовым базам - если вы не можете этого сделать, вы должны бросить страницу обслуживания на минуту. Вы должны быть в состоянии автоматизировать это с помощью capistrano или любого другого инструмента развертывания.
Итак у меня есть 3 задачи: cap:deploy - что делает традиционный метод перезапуска все в то же время с крюком, который помещает страницу обслуживания, а затем снимает ее после проверки HTTP. cap:deploy:rolling-что делает этот каскад через машину (я тяну из iClassify, чтобы узнать, сколько дворняг находится на данной машине) без страницы обслуживания. cap deploy:migrations-который делает страницу обслуживания + миграции, так как это обычно плохая идея для запуска миграции 'live'.
у меня есть вопрос
что происходит, когда срабатывает /usr/local/bin/mongrel_rails cluster::start --только 8000 ?
все ли запросы обслуживаются этим конкретным процессом до их завершения ? или они прерваны ?
Мне любопытно, можно ли все это запустить/перезапустить, не затрагивая конечных пользователей...