Это не ограничение архитектуры и у apache много решений. В статье речь идёт про используемый по умолчанию prefork, есть ещё event, использующий тот же epoll/kqueue и worker, являющийся чем-то средним между предыдущими. Ну и кучка более экзотических модулей.
Если говорить про все возможные варианты, то ИМХО проблема apache не в том, что он кривой и медленный, а в том, что в попытке объединить в себе web и application сервер, он стал слишком навороченным и сложным.
Можно даже использовать один экземпляр apache с mpm_event/mpm_worker/mpmt_os2/mpm_netware + mod_proxy как проксирующий web сервер, второй с mpm_prefork как application сервер и возможно эта связка не сильно уступит классическим nginx+apache/php-fpm/etc.
Я не фанат apache и предпочту использовать nginx, если такой вариант в принципе возможен, но в контексте данной статья мне показалось уместным упомянуть о том, что не prefork'ом единым жив старый индеец.
Так же помимо размера permgen иногда помогает -XX:NewRatio который отвечает за молодое поколение
основной принцип работы gc:
заполнился eden? — чистим мертвецов, выживших закидываем в survivor
заполняется survivor? — меняем местами 2 наших слота survivor (с полным работаем, свободный становится активным, пошло заполнение с eden), вышившие в old
заполнился old? — ну тут уже глобал счастье, курите все пока мы разбираемся с мусором (а при большом heap дело нешустрое)
Основное правило явы «живи быстро, умри молодым», в случае недостаточного количества под young не выполняется.
По умолчанию выделяется достаточно низкий уровень, в итоге под нагрузкой eden забивается моментом, survivor тоже оказывается заполненный, а следовательно объект сразу попадает в old.
В итоге имеем ситуацию:
1. eden дёргается сборщиком мусора практически непрерывно, доп нагрузка на проц.
2. данные перетекают сразу в old, хотя уже в следующий момент оказываются мертвы и лишь занимают память, когда же заполниться old, то сборка по нему это уже совсем другая история с нагрузками на проц.
увеличивая размер eden имеем
1. eden заполняется постепеннь, выжившие зачастую влезают в survivor, так как те кто там уже были к этому времени почти все поумирали
2. old заполняется уже намного медленнее, следовательно глобальный сборщик запуститься позже или отработает меньше времени.
хотя слишком усердствовать тоже не надо, так как алгоритмы сборки мусора по old более оптимальны по скорости сборки и под большие объёмы, во всём нужно искать середину.
Пример выше всего лишь более подробный, и logging — находится в стандартной библиотеке python. Дополнительно устанавливать ничего не нужно.
Я считаю, что написать «log.debug('message')» не сложнее, чем написать print('message'), и этому нужно учить сразу в том числе школьников, и новичков. Вредные привычки, приобретенные во время обучения искореняются с большим трудом.
DevOps: High-impact Strategies — What You Need to Know: Definitions, Adoptions, Impact, Benefits, Maturity, Vendors
Roebuck, Kevin
Web Operations: Keeping the Data On Time
Allspaw, John, Robbins, Jesse
Cloud Computing Architected: Solution Design Handbook
Rhoton, John, Haukioja, Risto
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler))
Farley, David, Humble, Jez
Pro Puppet
Turnbull, James, James Turnbull, Jeffrey McCune December 8, 2011
Pulling Strings with Puppet: Configuration Management Made Easy
Turnbull, James
Configuration Management: High-impact Strategies — What You Need to Know: Definitions, Adoptions, Impact, Benefits, Maturity, Vendors
Roebuck, Kevin
А из статей и блогов:
Стоит обрать внимание на этот и этот блоги. А так же на хэштеги #opschef, #puppet и #devops и прочие тематические в твиттере.
С pv можно ограничить скорость создания дампа (если чтение с базы быстрее скорости дисков и iowait уходит в 100%, в результате чего создание дампа мешает другим сервисам работать с диском) можно добавить: pv -L 10m, где 10m — ограничение в 10 Мб/с.
Внимательные читатели, конечно, заметили, что как бы мы не хитрили — от передачи пароли и временного ключа в открытой или хэшированной форме нам никуда не деться.
Деться: временный ключ мы шифруем алгоритмом с открытым ключом.
Большое спасибо моему коллеге за эту публикацию и за инвайт.
Я постараюсь ответить на Ваш вопрос, какое оборудование является самым новым.
У компании Alcon это система WaveLight.
У Shwind это установка Amaris 750S.
У ZEISS это соответственно VisuMax и эксимерный лазер MEL 90 (этот пока не прошел сертификацию в России).
У Abbott это установка Star S4 (у них самое дорогое сопровождение).
Отдельно можно рассмотреть продукцию компании Nidek, у них другой принцип работы — вращающаяся щель (у всех это flying spot). Установки называются EC-5000 и более новая Quest.
Если говорить про все возможные варианты, то ИМХО проблема apache не в том, что он кривой и медленный, а в том, что в попытке объединить в себе web и application сервер, он стал слишком навороченным и сложным.
Можно даже использовать один экземпляр apache с mpm_event/mpm_worker/mpmt_os2/mpm_netware + mod_proxy как проксирующий web сервер, второй с mpm_prefork как application сервер и возможно эта связка не сильно уступит классическим nginx+apache/php-fpm/etc.
Я не фанат apache и предпочту использовать nginx, если такой вариант в принципе возможен, но в контексте данной статья мне показалось уместным упомянуть о том, что не prefork'ом единым жив старый индеец.
Т.е. вместо строк в crontab'e:
достаточно использовать:
основной принцип работы gc:
заполнился eden? — чистим мертвецов, выживших закидываем в survivor
заполняется survivor? — меняем местами 2 наших слота survivor (с полным работаем, свободный становится активным, пошло заполнение с eden), вышившие в old
заполнился old? — ну тут уже глобал счастье, курите все пока мы разбираемся с мусором (а при большом heap дело нешустрое)
Основное правило явы «живи быстро, умри молодым», в случае недостаточного количества под young не выполняется.
По умолчанию выделяется достаточно низкий уровень, в итоге под нагрузкой eden забивается моментом, survivor тоже оказывается заполненный, а следовательно объект сразу попадает в old.
В итоге имеем ситуацию:
1. eden дёргается сборщиком мусора практически непрерывно, доп нагрузка на проц.
2. данные перетекают сразу в old, хотя уже в следующий момент оказываются мертвы и лишь занимают память, когда же заполниться old, то сборка по нему это уже совсем другая история с нагрузками на проц.
увеличивая размер eden имеем
1. eden заполняется постепеннь, выжившие зачастую влезают в survivor, так как те кто там уже были к этому времени почти все поумирали
2. old заполняется уже намного медленнее, следовательно глобальный сборщик запуститься позже или отработает меньше времени.
хотя слишком усердствовать тоже не надо, так как алгоритмы сборки мусора по old более оптимальны по скорости сборки и под большие объёмы, во всём нужно искать середину.
Дальше вместо print, использовать log:
Пример выше всего лишь более подробный, и logging — находится в стандартной библиотеке python. Дополнительно устанавливать ничего не нужно.
Я считаю, что написать «log.debug('message')» не сложнее, чем написать print('message'), и этому нужно учить сразу в том числе школьников, и новичков. Вредные привычки, приобретенные во время обучения искореняются с большим трудом.
Это существенное усложнение?
127.0.0.1 apps.skype.com
127.0.0.1 api.skype.com
127.0.0.1 static.skypeassets.com
127.0.0.1 rad.msn.com
127.0.0.1 adriver.ru
должно быть так:
DevOps: High-impact Strategies — What You Need to Know: Definitions, Adoptions, Impact, Benefits, Maturity, Vendors
Roebuck, Kevin
Web Operations: Keeping the Data On Time
Allspaw, John, Robbins, Jesse
Cloud Computing Architected: Solution Design Handbook
Rhoton, John, Haukioja, Risto
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Addison-Wesley Signature Series (Fowler))
Farley, David, Humble, Jez
Pro Puppet
Turnbull, James, James Turnbull, Jeffrey McCune December 8, 2011
Pulling Strings with Puppet: Configuration Management Made Easy
Turnbull, James
Configuration Management: High-impact Strategies — What You Need to Know: Definitions, Adoptions, Impact, Benefits, Maturity, Vendors
Roebuck, Kevin
А из статей и блогов:
Стоит обрать внимание на этот и этот блоги. А так же на хэштеги #opschef, #puppet и #devops и прочие тематические в твиттере.
Тоже использую Percona, но с базой в <10 Гб. Пользуюсь дампом в sql-файл. Чтобы снять бекап без блокировки таблиц пользуюсь такими ключами:
В многоточиях описания разных состояний, бекап файловой структуры, архивация и отправка на S3.
Без показа текущего состояния и метки времени:
С
pv
можно ограничить скорость создания дампа (если чтение с базы быстрее скорости дисков и iowait уходит в 100%, в результате чего создание дампа мешает другим сервисам работать с диском) можно добавить:pv -L 10m
, где 10m — ограничение в 10 Мб/с.Деться: временный ключ мы шифруем алгоритмом с открытым ключом.
Кстати, вместо
sortList.sort(key=sortByLength)
можно просто писать
sortList.sort(key=len)
Также, что бы не плодить лишние функции утилитарные можно использовать лямбды.
www.whatsthecost.com/snowball.aspx
Я постараюсь ответить на Ваш вопрос, какое оборудование является самым новым.
У компании Alcon это система WaveLight.
У Shwind это установка Amaris 750S.
У ZEISS это соответственно VisuMax и эксимерный лазер MEL 90 (этот пока не прошел сертификацию в России).
У Abbott это установка Star S4 (у них самое дорогое сопровождение).
Отдельно можно рассмотреть продукцию компании Nidek, у них другой принцип работы — вращающаяся щель (у всех это flying spot). Установки называются EC-5000 и более новая Quest.