сервер

переведи на наш

Судя по тому, что вопрос сугубо специфический, люди имеющие к этому отношение, без труда догадаются, о чем идет речь.
Кстати, по поводу взломоустойчивости, где-то в тырнетах видел образ линуксового диска, с набором хактулзов на борту, можно, как вариант, заюзать его, причем это лайвсидюк, сам не пробовал, но судя по отзывам, неплох.
 
Судя по тому, что вопрос сугубо специфический, люди имеющие к этому отношение, без труда догадаются, о чем идет речь.
Кстати, по поводу взломоустойчивости, где-то в тырнетах видел образ линуксового диска, с набором хактулзов на борту, можно, как вариант, заюзать его, причем это лайвсидюк, сам не пробовал, но судя по отзывам, неплох.

правила форума - писать только по русски
 
взломоустойчивость - устойчивость системы к взлому
тырнет - интернет
линукс - ОС семейства *nix
хактулза - инструмент для проникновения или поиска уязвимых мест
юзать - использовать
лайвсиди - Live CD образ операционной системы работающей без установки, копирующая себя в RAM рабочей машины, с набором утилит и пакетов
винда (виндюк, вынь) - ОС семейства Windows
сервак (сервант) - сервер
апач(папач) - вэб сервер Apache
пхп(пых) - PHP
мускуль - СУБД MySQL
монго - MongoDB NoSQL СУБД
софт - программное обеспечение
патч - patch дополнение, исправление
модуль - module дополнение, расширение
phpBB - набор php готовых скриптов, например форум, для последующего использования
Joomla - CMS
сплойт - скрипт или набор скриптов типа shell, который использует дыру (ошибку) в скрипте PHP, для последующей заливки и получения доступа к чему-либо(СУБД, файловая система)
файрволл - программное обеспечение для контроля траффика, использования портов
DDos - атака на сервер, отказ в обслуживании
фряхв, фря - OS семейства *nix FreeBSD
гентуха, генту - OS семейства *nix Gentoo
виртуалка - операционная система развернутая на средстве виртуализации (VirtualBox, Pararells, VMWare)
 
Вот само увеличение нагрузки и грузит проц :-)
Ничего там не застряло, всё прекрасно работает, просто если есть возможность оптимизации и снижения расходов - надо попытаться.

Ок, нагрузка растет - проц грузится, это понятно. Но Апач резервирует по настройкам заранее ресурсы, в основном память, конечно, и с ростом нагрузки использование ресурсов не должно расти не только с опережением, но и линейно даже. А у вас,как я понял, с ростом общей нагрузки проц начинает нагружаться очень сильно, или не так?
Если нет, то просто увеличьте память согласно ранее приведенной методике, ну и общие характеристики насколько считаете целесообразным и попробуйте прикрутить ngnix на вход для разгрузки Апача.
Если же нагрузка на проц именно что растет сильнее, чем должна, то а) ковыряйте конфиги Апача, сбалансируйте настройки б) смотрите что еще может нагружать проц на пиках, кроме Апача, мало ли в) и если нет, все же прикрутите хоть на время mod_status, для удобства
Если есть возможность и желание - выложите немного статистики при большой нагрузке и кусочки конфиги через какую-нить шару для общественного препарирования. Естественно очищенные от всякой private info. :)
 
а значение %si (или %sirq) около чего крутится?

тоже ноль.

Вообще, учитывая что java стабильно тянет на себя немалый процент CPU, я думаю что мы получаем
довольно оптимальную работу в этой конфигурации, не идеальную конечно, но приличную.
 

Attachments

А у вас,как я понял, с ростом общей нагрузки проц начинает нагружаться очень сильно, или не так?
не так.
Я же писал что нагрузка балансируется до апача и можно считать её постоянной для упрощения.
Просто хотел услышать цифры, сколько клиентов может обслуживать апач?

Пока я склоняюсь к ответу: "в идеальной ситуации на 50% больше, в моём случае - на 20-30%"
Имеет ли смысл такая оптимизация? наверное да, но есть и другие способы снижения затрат, чем я сейчас и занят поскольку, всё таки, веб не моя прямая специализация.

Если есть возможность и желание - выложите немного статистики при большой нагрузке и кусочки конфиги через какую-нить шару для общественного препарирования.
я в предыдущем посте два файлика закинул, но глубоко копаться наверное нет смысла, потому что я не смогу быстро играться с конфигами чтобы смотреть результат. Во-первых: из-за сложности системы это не сделать простым редактированием конфигов, во-вторых: из-за недостатка времени. Так что из уважения к Вашему времени и, чтобы избежать обвинений вроде "ему насоветовали, а он не пользуется рекомендациями!" наверное надо притормозить. :-)

Спасибо за участие.
 
Last edited:
Джава сама по себе - довольно производительная платформа. И сотни запросов в секунду для неё - это совсем мало.
Вот тут ты конечно загнул. Чтобы JAVA вдруг стала производительной, я даже не знаю, что нужно сделать, помимо каждодневной установки апдейтов. Типичный пример Solaris+JAVA+GlassFish(free edition)+clasters зажирает почти все ресурсы этого сервера. На glassfish крутится один единственный сервлет, количество пользователей примерно 500, получаем наглядную проблему высвобождения ресурсов. Сервлет - нечто типа трехзвенки, просто обрабатывает запросы к разным субд, и вываливает json. Сервер периодически, просто задыхается. Подобный сервлет, написанный на PHP, справляется с этой задачей на простом сервачке, единственное - нет столько драйверов под разные субд.
 
Всё зависит от того, как ей пользоваться. В интернете пачки success stories о том, как на ней пишут вещи, которые работают с тысячами активных пользователей или обрабатывают высокоскоростные события (биржевой софт)
Безусловно, хорошие концы имеют место быть, и нельзя связывать несвязумое, тем не менее есть и unsuccessful stories и их lotsa. Приемущества очевидны, таймбины, платформы типа hibernate, да еще JSF и т.д. Все дело в правильности выбора и подхода к решению той или иной задачи, я считаю, можно бесконечно увеличивать ресурсы сервера, если код написан криво, или неправильно выбраны инструменты. Так что I AGREE.
 
тоже ноль.

Вообще, учитывая что java стабильно тянет на себя немалый процент CPU, я думаю что мы получаем
довольно оптимальную работу в этой конфигурации, не идеальную конечно, но приличную.
Приложенные файлы отражают совсем не пиковую нагрузку, так же? Тем не менее, интересным выглядит значение %sy, примерно треть от от общей загрузки. Это нагрузка на какой-то kernel драйвер. Такой вопрос, под 300 клиентами вы имели в виду 300 уникальных соединений в секунду или более длительный интервал времени?
Я не знаю арахитектуры вашего приложения. Как осуществляется взаимодействие веб-сервера с апп-сервером, и апп-сервера с ДБ. Но, возможно, вы упираетесь в tcp local port range limit. Что возвращает такая вот команда: sysctl net.ipv4.ip_local_port_range ?
По дефолту обычно net.ipv4.ip_local_port_range = 32768 61000
Когда клиент соединяется с вашим апачем, то скорее всего апач форкает процесс, который биндит локальный TCP сокет для взаимодействия с апп-сервером. После завершения обслуживания клиента сокет освобождается не сразу. Есть tcp_fin_timeout в течение которого система будет держать этот сокет, обычно это 60 сек. (61000 - 32768)/60 = 470 сокетов в сек. Это число отражает макс. число сокетов, которое система может биндить после достижения степени насыщения. На практике эта цифра меньше, сокеты открываются не молниеносно. Если мои предположения верны, то вам надо тюнить tcp stack ядра. Погуглите tune linux for high performance app server.
 
Вот тут ты конечно загнул. Чтобы JAVA вдруг стала производительной, я даже не знаю, что нужно сделать, помимо каждодневной установки апдейтов. Типичный пример Solaris+JAVA+GlassFish(free edition)+clasters зажирает почти все ресурсы этого сервера.
Просто в реальных бизнес приложениях используют Unix+Java+Weblogic/Websphere+Oracle, тогда легко решаются задачи поддержки тысяч пользователей, террабайтных баз и сверхсложных вычислений (вроде всей инфострактуктуры Мтс, билайна, мегафона или телеком нью зеланд). А установку апдейтов на продакшене никто в здравом уме чаще раза в месяц делать не даст. :) Просто Java не самый лучший вариант для одной небольшой страничке, которая только и делает, что возвращает данные из баз, производительности добиться можно при прямых руках, но намного быстрее и проще сделать такую страничку на php.
 
Last edited:
Приложенные файлы отражают совсем не пиковую нагрузку, так же?
В тот момент было где-то 12-13К одновременных сессий, если нагрузка на этом сервере была низкая (я не проверял честно говоря) то это как раз и означает что load balancer запусил много серверов, чтобы CPU оставался внутри заданных рамок.

Тем не менее, интересным выглядит значение %sy, примерно треть от от общей загрузки. Это нагрузка на какой-то kernel драйвер.
Интересно....
Такой вопрос, под 300 клиентами вы имели в виду 300 уникальных соединений в секунду или более длительный интервал времени?
И в секунду и в миллисекунду... одновременно.

Как осуществляется взаимодействие веб-сервера с апп-сервером, и апп-сервера с ДБ.
Вы меня лучше спросите про базу данных, я отвечу... :-) а тут только руками развести могу.

Но, возможно, вы упираетесь в tcp local port range limit. Что возвращает такая вот команда: sysctl net.ipv4.ip_local_port_range ?
Завтра гляну... Может всё именно так и происходит.

Спасибо.
 
А установку апдейтов на продакшене никто в здравом уме чаще раза в месяц делать не даст.
Вы не правы, в нормально масштабируемой системе, нет никакой проблемы вывести сервер из эксплуатации для обновления. Не надо ставить знак равенства между единицей оборудования и всей системой.
 
Вы не правы, в нормально масштабируемой системе, нет никакой проблемы вывести сервер из эксплуатации для обновления. Не надо ставить знак равенства между единицей оборудования и всей системой.
Тут дело не в во времени простоя сервера (все равно обновление делается по ночам и да возможно несколько резервных серверов), просто любое обновление потенциально может привести к краху всей системы (банально версия сторонней библиотеки не совпадет), поэтому каждое крупное обновление библиотек на промышленных серверах проходит через тестовые сервера с автотестами и кучу других шагов. Поэтому проводить обновление библиотек каждый день будет или очень дорого по ресурсам, или очень опасно. В идеале обновление сервера (компании уровня телеком нью зиланд или крупнее) должно выполняться не чаще раза в месяц, но все равно, конечно, не получается избавиться от точечных спот-фиксов при самых критичных проблемах.
 
Last edited:
Тут дело не в во времени простоя сервера (все равно обновление делается по ночам и да возможно несколько резервных серверов), просто любое обновление потенциально может привести к краху всей системы (банально версия сторонней библиотеки не совпадет), поэтому каждое крупное обновление библиотек на промышленных серверах проходит через тестовые сервера с автотестами и кучу других шагов. Поэтому проводить обновление библиотек каждый день будет или очень дорого по ресурсам, или очень опасно. В идеале обновление сервера (компании уровня телеком нью зиланд или крупнее) должно выполняться не чаще раза в месяц, но все равно, конечно, не получается избавиться от точечных спот-фиксов при самых критичных проблемах.

Никаких спот фиксов на продакшен :)
 
глубоко копаться наверное нет смысла, потому что я не смогу быстро играться с конфигами чтобы смотреть результат... чтобы избежать обвинений вроде "ему насоветовали, а он не пользуется рекомендациями!" наверное надо притормозить. :-)

Да ну какие тут обвинения? :) Вы спросили, народ посоветовал, а как и что применять - дело ваше. Может вы гипотетически спрашиваете или на будущее. Вот если б вы за посоветовать деньги платили и потом ничего не делали - тогда было бы странно. )))
А конфиги все же было б интересно глянуть, по-крайней мере лимиты серверов, пользователей и очереди. Но опять же it's up to you.
 
Что возвращает такая вот команда: sysctl net.ipv4.ip_local_port_range ?
Да, дефолтные значения стоят
Значит ли это что в ожидании tcp_fin_timeout система будет простаивать? то есть CPU не будет расти, правильно я понимаю?
Рекомендуете уменьшить таймаут?
 
А конфиги все же было б интересно глянуть, по-крайней мере лимиты серверов, пользователей и очереди. Но опять же it's up to you.
Такие?
Code:
<IfModule prefork.c>
StartServers       16
MinSpareServers    16
MaxSpareServers   32
MaxClients       95
</IfModule>
<IfModule worker.c>
StartServers         2
MaxClients         95
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
 
Значит ли это что в ожидании tcp_fin_timeout система будет простаивать?
Да
то есть CPU не будет расти, правильно я понимаю?
Будет расти %sy. Forked instance апача будет пытаться открыть сокет и дергать соответствующую компоненту ядра.
Рекомендуете уменьшить таймаут?
Да. Обычно меняют несколько настроек: увеличивают ipv4 local port range, уменьшают tcp fin timeout, увеличивают rmem/wmem для ipv4

Eще одна мысль. Меня просто смущает такая ровная цифра, как 300 клиентов. Ваш Java апп-сервер... Вы наверняка используете какой-то контейнер типа Tomcat или Resin. Надо посмотреть, какие ограничения накладываются коннектором контейнера - thread-max для Resin, maxProcessors для Tomcat.
 
Такие?
Code:
<IfModule prefork.c>
StartServers       16
MinSpareServers    16
MaxSpareServers   32
MaxClients       95
</IfModule>
<IfModule worker.c>
StartServers         2
MaxClients         95
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

Брр. Это ваш реальный конфиг?
 
Back
Top