Мой экземпляр RDS затоплен моим экземпляром EC2, но мой экземпляр EC2 работает без сбоев.

У меня довольно сложная настройка в моей консоли AWS.

  1. У меня есть экземпляр EC2 в регионе A с установленной LAMP для того, что я назову моя CRM.
  2. У меня есть RDS в том же регионе A для моей CRM, который содержит информацию о моих заказах / клиентах.
  3. У меня есть экземпляр EC2 в регионе B с установленной LAMP, который я буду называть своим «Корзина»
  4. У меня есть RDS в том же регионе B, что и база данных для моей корзины покупок.
  5. Несколько незначительная деталь (я думаю): у меня есть два других экземпляра EC2 в регионах C и D с установленной LAMP, которые являются вторичными «тележками для покупок». У них также есть свои собственные экземпляры RDS.

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

Теперь у меня возникла проблема: вчера, около 4 часов утра, мой экземпляр RDS B начал переполнение подключениями и превысил свой лимит в 50 одновременных подключений. Итак, я обновился с t2.small до t2.medium, и теперь у меня 90 одновременных подключений, но проблема сохраняется, постоянно достигая лимита 90 подключений где-то каждые пару минут до получаса.

Я также обновил свой EC2 A экземпляр, но это опять же ничего не меняет. Когда я запускаю следующее на своем экземпляре RDS B, я обычно получаю 6-10 потоков,но иногда он начинает резко увеличиваться, и когда это происходит, обычно достигается 90 подключений в течение одной или двух минут.

ПОКАЗАТЬ статус КАК 'Threads_connected';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 6     |
+-------------------+-------+
1 row in set (0.01 sec)

Выполнение следующей команды на моем экземпляре RDS B показывает, что он разрывает подключения когда я достигаю 90 одновременных подключений:

показывает статус как «Conn%»;

+-----------------------------------+--------+
| Variable_name                     | Value  |
+-----------------------------------+--------+
| Connection_errors_accept          | 0      |
| Connection_errors_internal        | 0      |
| Connection_errors_max_connections | 6856   |
| Connection_errors_peer_address    | 0      |
| Connection_errors_select          | 0      |
| Connection_errors_tcpwrap         | 0      |
| Connections                       | 123258 |
+-----------------------------------+--------+
7 rows in set (0.03 sec)

Когда я добираюсь до 90 подключений к RDS B, мой экземпляр EC2 A замедляется до обхода, и количество подключений на экземпляре RDS A увеличивается . И мой экземпляр EC2 B отправляет ошибки HTTP 500 из-за сбоя подключения mysqli из-за слишком большого количества подключений.

Наконец, если я запускаю следующее на экземплярах RDS A или RDS B, я вижу много спящих команды, но почти никогда не запрашивают:

SHOW FULL PROCESSLIST;

Временное «решение», которое я придумал, - это перезапустить службу Apache на экземпляре EC2 A. Как только я это сделаю, все процессы в RDS A и B очищаются в течение нескольких секунд.

Я не понимаю, как это могло внезапно начать происходить, и даже после увеличения мощности моих экземпляров, как это может продолжаться произойдет. Я не знаю, где искать дальше. Единственная «проблема», с которой я столкнулся, насколько я могу судить, - это то, что мой предел подключений RDS исчерпан. Средние значения нагрузки EC2 очень хорошие (сейчас 0,02). Я не изменил ни одного кода за последнюю неделю, о котором могу думать.

0
задан 28 January 2020 в 16:38
1 ответ

ഏകദേശം 8 മണിക്കൂർ തിരയലിനുശേഷം ഞാൻ ഈ പ്രശ്നം കണ്ടെത്തി. എന്റെ വെബ്‌സൈറ്റുകളിലൊന്നിലേക്ക് ഒരു ഫ്രീലാൻ‌സർ‌ അവതരിപ്പിച്ച ചില തെമ്മാടി കോഡ് ഉണ്ടായിരുന്നു, അത് മൈസ്ക്ൽ‌ കണക്ഷനുകൾ‌ അടയ്‌ക്കുന്നതിൽ‌ പരാജയപ്പെട്ടു. നിങ്ങൾ സമാനമായ ഒരു സാഹചര്യം നേരിടുന്നുണ്ടെങ്കിൽ, ഇതുപയോഗിച്ച് പരിഷ്‌ക്കരിച്ച ഫയലുകൾക്കായി സെർവർ പരിശോധിക്കുക:

find . -type f -mtime -$n

ഇവിടെ $ n നിങ്ങൾ പ്രശ്‌നങ്ങൾ നേരിടാൻ തുടങ്ങിയ ദിവസങ്ങളുടെ എണ്ണത്തെ പ്രതിനിധീകരിക്കുന്ന ഒരു സംഖ്യയാണ്. മാറ്റം സംഭവിച്ചിരിക്കാമെന്ന് നിങ്ങൾ പ്രതീക്ഷിക്കുന്ന ഡയറക്ടറിയിൽ ആ കമാൻഡ് പ്രവർത്തിപ്പിക്കുക.

1
ответ дан 26 February 2020 в 00:36

Теги

Похожие вопросы