Какие-то крупные базы стоят на сервере? Можно конфигурационный файл mysql в студию?
Был опыт работы с этой CMS, много запросов ест эта платформа.
Тонкое место в Вашей ситуации - это именно mysql, перенесите сервер mysql на другую машину с SSD винчестером.
Посмотрите на владельца и группу файла конфигурации. Причем тут Ваш созданный пользователь к файлу, который принадлежит совсем другому владельцу?
Читаем.
http://www.oldnix.org/users-groups/
Debian 7: apache2+nginx+mysql+xcache все с официальных источников.
Apache2 более менее конфигурируетсья как нужно, копать нужно в сторону более мощного nginx ;)
Хотя сейчас некоторые разработчики начали более гибко оптимизировать ту или иную программную часть самого скрипта.
ТС, такое железо может выдержать много чего ;) Если Вы админ, то думаю не составит такого труда зайти на официальные документации или любые сайты и найти что и как делать определенная настройка того или иного софта.
http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html#limit_req_zone
nano /etc/nginx/nginx.conf
# Увеличиваем максимальное количество используемых файлов worker_rlimit_nofile 8192; ## Число рабочих процессов, рекомендуется ставить по количеству ядер worker_processes 1; # Уменьшает число системных вызовов gettimeofday(), что приводит к увеличению производительности timer_resolution 100ms; # Директива задаёт приоритет рабочих процессов от -20 до 20 (отрицательное число означает более высокий приоритет). worker_priority -5; events { # Увеличиваем максимальное количество соединений worker_connections 2048; # Использовать эффективный метод epoll для обработки соединений use epoll; } http { # Включить sendfile(). Использование sendfile() экономит системные вызовы, уменьшает число копирований данных sendfile on; output_buffers 2 64k; gzip on; gzip_min_length 1100; gzip_buffers 64 8k; gzip_comp_level 3; gzip_http_version 1.1; gzip_proxied any; gzip_types text/plain application/xml application/x-javascript text/css; # Отключаем таймаут на закрытие keep-alive соединений keepalive_timeout 0; # Не отдавать версию nginx в заголовке ответа server_tokens off; # Сбрасывать соединение по таймауту reset_timedout_connection on; #Директива описывает зону, в которой хранятся состояния сессий. Значения сессий определяется заданной переменной. limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; } server { listen 80 default; server_name localhost; access_log /var/log/nginx/localhost.access.log; location / { root /var/www/; index index.html index.htm index.php; open_file_cache max=1024 inactive=600s; open_file_cache_valid 2000s; open_file_cache_min_uses 1; open_file_cache_errors on; } location ~ \.php$ { limit_req zone=one burst=5; fastcgi_pass unix://tmp/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; fastcgi_hide_header "Cache-Control"; } location ~ /\.ht { deny all; } expires max; # Внимание!!! Эта строка expires необходима! add_header Last-Modified $sent_http_Expires; }
Проставить
StartServers 5 MinSpareServers 5 MaxSpareServers 5 MaxClients 30 MaxRequestsPerChild 1000
MaxClients
Директива MaxClients устанавливает максимальное количество параллельных запросов, которые будет поддерживать сервер. Apache не будет порождать больше процессов/потоков чем MaxClients. Значение MaxClient не долно быть слишком маленьким (иначе много клиентов останутся необслуженными), но и не стоит устанавливать слишком большое количество - лучше не обслужить часть клиентов чем исчерпать все ресурсы, залезть в своп и умереть под нагрузкой. Хорошим может быть значение MaxClients = количество памяти выделенное под веб-сервер / максимальный размер порожденного процесса или потока. Для статических файлов apache использует около 2-3 Мб на процесс, для динамики (php, cgi) - зависит от скрипта, но обычно около 16-32 Мб.
Вы можете прикинуть примерный размер посмотрев на колонку rss в выводе `ps -ylC httpd --sort:rss`
Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.
MinSpareServers, MaxSpareServers, и StartServers
Т.к. создание потока, и особенно процесса - дорогая операция, apache создает их заранее. Директивы MaxSpareServers и MinSpareServers устанавливают как много процессов/потоков должны ожидать в готовности принять запрос (максимум и минимум). Если значение MinSpareServers слишком маленькое и неожиданно приходит много запросов, apache вынужден будет создавать много новых процессов/потоков, что создаст дополнительную нагрузку в этой стрессовой ситуации. С другой стороны, если MaxSpareServers слишком велико, apache будет сильно нагружать систему этими процессами, даже если количество клиентов минимально.
Постарайтесь установить такие MinSpareServers и MaxSpareServers, чтобы apache не создавал более 4 процессов/потоков в секунду. Если он создаст более 4, в ErrorLog будет помещено сообщение об этом. Это - сигнал того что MinSpareServers слишком мало.
MaxRequestsPerChild
Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток прежде чем он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды созданный процесс/поток не будет завершен никогда (ну кроме случаев остановки сервера или краха этого процесса/потока). Рекомендую установить MaxRequestsPerChild равное какому-нибудь достаточно большому числу (несколько тысяч). Это не создаст излишней нагрузки, связаной с тем что apache будет вынужден создавать новые дочерние процессы, в то же время это поможет избавиться от проблем с утечкой памяти в дочерних процессах (что очень возможно например если вы используете нестабильную версию php).
KeepAlive и KeepAliveTimeout
KeepAlive позволяет делать несколько запросов в одном TCP-подключении. Это особенно полезно для html-страниц с большим количеством изображений. Если KeepAlive установлен в Off, то для самой страницы и для каждого изображения будет создано отдельное подключение (которое нужно будет обработать master-процессу), что плохо и для сервера и для клиента. Так что для подобных случаев рекомендуется устанавливать KeepAlive в On. Для других применений (например для download-сервера) KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не сразу, а ждет KeepAliveTimeout секунд нового запроса. Для того чтобы процессы не висели слишком долго в бесполезном ожидании, устанавливайте KeepAliveTimeout достаточно малым, около 5-10 секунд обычно достаточно.
Вообще обсуждалось по-моему где-то уже ;)
Переходите на KVM.
Какой трафик? Сколько сайтов на VPS? Могу посмотреть сервер.