У меня есть две машины c3.2xlarge EC2 со средой Ubuntu в us-west-2a AZ. Оба содержат одинаковый код с базой данных mySQL от AWS RDS (db.r3.2xlarge). Оба экземпляра добавляются в ELB. У обоих есть один запланированный cron, который запускается дважды в день.
ELB настроен на подачу сигнала тревоги при превышении порогового значения 5,0. Загрузка ЦП обоих экземпляров составляет в среднем 30–50. В часы пик достигает 100% в течение минуты или двух, а затем возвращается к норме. Но ELB постоянно бьет тревогу трижды в день. На данный момент оба экземпляра
CPU - ~50%
Memory - total - 14979
used - ~6000
free - ~9000
RDS CPU - ~30%
Connections - 200 to 300 /5,000
Согласно этому https://aws.amazon.com/premiumsupport/knowledge-center/elb-latency-troubleshooting/ Я не нашел ничего плохого в экземплярах. Но по-прежнему задержка достигает пика, и оба экземпляра не отвечают.
До сих пор я просто удаляю один экземпляр из балансировщика нагрузки, перезапускаю apache, затем загружаю его обратно и делаю то же самое для другого экземпляра. Это отлично справляется со своей задачей, и экземпляры и ELB работают в течение следующих 6-10 часов. Но это неприемлемо, так как каждый день дважды или трижды нужно заботиться о сервере, нужно его перезапускать.
Мне нужно знать, есть ли что-нибудь не так или какие-либо шаги, которые необходимо предпринять для решения этой проблемы.
Статус сервера Apache содержит слишком много таких (~ 200/250 процессов):
7-0 23176 1/2373/5118 C 30.95 3986 0 0.0 7.01 15.78 127.0.0.1 ip-xxx-xxx-xxx-xxx.us-west-2.comp OPTIONS * HTTP/1.0
ЦПУ использование (%) не является ключом, ключом является ЦП средняя нагрузка (очередь) и сетевые метрики, метрики apache, буферы и т. д. Балансировщики нагрузки - это очень простые устройства, проблемы, в архитектуре которых LB задействованы, обычно не связаны с ELB, а связаны с характером того, как работает остальное.
Чтобы увидеть, в чем проблема, вам нужно выполнить следующие шаги:
Проверьте и соответствующим образом настройте параметры ядра:
net.core.wmem_max
net.core.rmem_max
net.core.netdev_max_backlog
net.core.somaxconn
net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.tcp_no_metrics_save
net.ipv4.tcp_timestamps
net.ipv4.tcp_fin_timeout
net.ipv4.tcp_max_tw_buckets
net.ipv4.tcp_tw_recycle
net.ipv4.tcp_synack_retries
net.ipv4.tcp_keepalive_time
net.netfilter.nf_conntrack_acct
net.netfilter.nf_conntrack_generic_timeout
net.netfilter.nf_conntrack_tcp_timeout_syn_sent
net.netfilter.nf_conntrack_tcp_timeout_syn_recv
net.netfilter.nf_conntrack_tcp_timeout_established
net.netfilter.nf_conntrack_tcp_timeout_fin_wait
net.netfilter.nf_conntrack_tcp_timeout_close_wait
net.netfilter.nf_conntrack_tcp_timeout_last_ack
net.netfilter.nf_conntrack_tcp_timeout_time_wait
net.netfilter.nf_conntrack_tcp_timeout_close
net.netfilter.nf_conntrack_tcp_timeout_max_retrans
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged
net.netfilter.nf_conntrack_icmp_timeout
net.netfilter.nf_conntrack_events_retry_timeout
net.ipv4.netfilter.ip_conntrack_generic_timeout
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent2
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close
net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans
net.ipv4.netfilter.ip_conntrack_icmp_timeout
net.netfilter.nf_conntrack_tcp_loose
net.netfilter.nf_conntrack_max net.nf_conntrack_max
net.netfilter.nf_conntrack_count
После этого Apache не отвечает? Это вовсе не вина ELB.