Назад | Перейти на главную страницу

Nginx лучше работает в Linux по сравнению с Apache?

Apache и Nginx сравниваются по производительности, поскольку Apache основан на потоках (для каждого нового соединения новый поток), а nginx основан на процессе (для каждого нового подключения к серверу новый процесс). Таким образом, Nginx работает лучше, поскольку основан на процессах. Но если они развернуты в Linux, это имеет значение, поскольку нет прямой концепции потоков, а в Linux потоки отображаются на процесс на уровне ядра. Итак, производительность должна быть одинаковой для Apache и Nginx в Linux, но Nginx лучше, чем Apache, почему?

Во-первых, неверно, что разветвление процесса обычно более эффективно, чем распараллеливание. Это во многом зависит от того, как ядро ​​ОС обрабатывает потоки / процессы.

Хорошо известно, что разветвление процессов - простая и эффективная задача в системах Unix, но ужасная в Windows. Это означает, что в Windows вам, вероятно, намного лучше использовать потоки, тогда как в Unix это не обязательно означает, что потоки более или менее эффективны, чем процессы.

Apache 2.X позволяет запускать в нескольких режимах, включая создание процессов или работу с пулом потоков.

В Интернете есть много ресурсов, которые сравнивают nginx с apache. Использование каждого теста ограничено из-за различных сценариев тестирования:

  • Конфигурация сервера, особенно. сервер apache
  • Охватываемая рабочая нагрузка, статический и динамический контент и т. Д.
  • Интерес к эталону: общая пропускная способность, время отклика, вариации времени отклика.

Наилучший вариант, который вам остается, - это разработать собственный тест производительности на вашем сервере с учетом вашего сценария. См. Также этот вопрос: https://stackoverflow.com/questions/2528266/how-to-benchmark-apache-nginx-setup

Тебе, наверное, все равно.

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

Так что, если все ваши клиенты сверхбыстрые, сверхзанятые и используют ссылки с малой задержкой (подумайте о сильно искусственной системе нагрузочного тестирования), то Apache вполне может справиться. Но добавьте сюда настоящий Интернет и реальных клиентов, и вы увидите преимущества Nginx.

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

nginx основан на процессе (для каждого нового подключения к серверу новый процесс)

Это не так. Nginx действительно порождает несколько рабочих процессов для обработки запросов, но каждый из них может обрабатывать более одного запроса одновременно, поскольку он управляется событиями. Это источник многих его преимуществ перед Apache, так как он может обрабатывать огромное количество одновременных запросов с относительно небольшим количеством процессов.

Что касается производительности, это полностью зависит от ситуации; Ни один из этих инструментов не может быть лучше при любых обстоятельствах.