AWS 콘솔에 다소 복잡한 설정이 있습니다.
- 저는 CRM이라고 부르는 LAMP가 설치된 지역 A에 EC2 인스턴스를 가지고 있습니다.
- 내 CRM에 대해 동일한 지역 A에 내가 보유한 주문/클라이언트의 정보가 포함된 RDS가 있습니다.
- LAMP가 설치된 지역 B에 EC2 인스턴스가 있는데 이를 "장바구니"라고 부르겠습니다.
- 내 장바구니에 대한 데이터베이스가 있는 동일한 지역 B에 RDS가 있습니다.
- 다소 사소한 세부 사항(제 생각에는): C와 D 지역에 보조 "장바구니"인 LAMP가 설치된 두 개의 다른 EC2 인스턴스가 있습니다. 또한 자체 RDS 인스턴스도 있습니다.
두 개의 기본 EC2 서버는 CURL을 통한 호출을 통해 서로 연결됩니다. 따라서 EC2 서버 B에 주문이 들어오면 주문 삽입, 클라이언트 정보 추가 등을 위해 EC2 서버 A에 컬 호출이 이루어집니다. 또한 서버 A는 가격을 업데이트하기 위해 서버 B에 CURL 호출을 할 수 있습니다. 등. 서버 B는 서버 A에 대한 CURL 호출을 수행하여 도시의 현재 배송 가격을 얻을 수 있습니다.
이제 제가 겪고 있는 문제는 어제 오전 4시경에 RDS B 인스턴스에 연결이 넘쳐나기 시작했고 동시 연결 한도인 50개에 도달했다는 것입니다. 그래서 t2.small에서 t2.medium으로 업그레이드했고 이제 90개의 동시 연결이 가능해졌지만 문제는 지속되어 몇 분에서 30분마다 어디에서나 90개의 연결 제한에 지속적으로 도달합니다.
EC2 A 인스턴스도 업그레이드했지만 이번에도 아무런 변화가 없습니다. RDS B 인스턴스에서 다음을 실행하면 일반적으로 6~10개의 스레드를 얻지만 때때로 급증하기 시작하고 그렇게 되면 일반적으로 1~2분 내에 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)
RDS B에서 90개의 연결에 도달할 때마다 EC2 A 인스턴스가 크롤링 속도를 늦추고 RDS A 인스턴스에서 연결이 급증합니다. 그리고 너무 많은 연결로 인해 mysqli 연결이 실패했기 때문에 EC2 B 인스턴스가 HTTP 500 오류를 보냅니다.
마지막으로 RDS A 또는 RDS B 인스턴스에서 다음을 실행하면 다음이 표시됩니다.많이잠자는 명령은 있지만 쿼리하는 경우는 거의 없습니다.
전체 프로세스 목록 표시;
제가 생각해낸 임시 "솔루션"은 EC2 A 인스턴스에서 Apache 서비스를 다시 시작하는 것입니다. 그렇게 하면 RDS A와 B의 모든 프로세스가 몇 초 내에 정리됩니다.
어떻게 이런 일이 갑자기 일어나기 시작할 수 있는지, 그리고 인스턴스의 성능을 높인 후에도 어떻게 이런 일이 계속 발생할 수 있는지 이해가 되지 않습니다. 다음에 어디를 봐야할지 아이디어가 없습니다. 내가 알 수 있는 유일한 "문제"는 RDS 연결 제한에 도달했다는 것입니다. EC2 로드 평균은 매우 좋습니다(현재 0.02). 지난 주에 제가 생각할 수 있는 어떤 코드도 변경하지 않았습니다.
답변1
약 8시간의 검색 끝에 마침내 이 문제를 발견했습니다. 프리랜서가 내 웹사이트 중 하나에 악성 코드를 도입하여 mysql 연결을 닫지 못했습니다.
이것이 다른 누군가에게 도움이 되기를 바랍니다. 비슷한 상황이 발생하는 경우 다음을 사용하여 최근에 수정된 파일이 있는지 서버를 확인하세요.
find . -type f -mtime -$n
$n
문제가 발생하기 시작한 일수를 나타내는 정수는 어디에 있습니까? 변경이 발생할 것으로 예상되는 디렉토리에서 해당 명령을 실행하십시오.