EC2 서버의 CPU 및 로드 평균 충돌

EC2 서버의 CPU 및 로드 평균 충돌

Java 게임 서버에서 어떤 서버 리소스가 지연을 일으키는지 알 수 없습니다. 내 게임 서버의 마지막 패치에서 EC2 램프 서버를 업데이트했습니다.아파치2.2, php5.3, mysql5.5도착하다아파치2.4, php7.0, mysql5.6. 또한 무엇보다도 각 게임 루프를 순환하는 몬스터의 인스턴스를 더 많이 포함하도록 게임 자체를 업데이트했습니다.

내 게임 서버가 시작될 때의 출력은 다음과 같습니다. 여기에 이미지 설명을 입력하세요.

몇 분 후의 결과는 다음과 같습니다. 여기에 이미지 설명을 입력하세요.

다음날 아침 결과는 다음과 같습니다. 여기에 이미지 설명을 입력하세요.

이미지에서 볼 수 있듯이 마지막 스크린샷에서 내 Java 프로세스의 CPU 사용량은 약 80%로 안정적이지만 로드 평균은 1.20에 도달했습니다. 오늘 아침에는 2.7까지 올라간 적도 있어요. CPU 크레딧은 내 서버의 실제 CPU 사용률에 영향을 미치므로 크레딧 잔액이 감소하면 백분율도 높아지는데 이는 의미가 있지만 서버가 80%로 지연되는 이유는 무엇입니까?

내 Amazon EC2 지표에서 CPU가 10%로 표시됩니다(이는 더욱 혼란스럽습니다). 여기에 이미지 설명을 입력하세요.

서버를 시작하면 MMORPG에 전혀 지연이 없습니다. 그러다가 CPU 크레딧이 부족해지면 지연이 발생하기 시작했습니다. 이로 인해 CPU 기반인 것처럼 느껴지지만 10%와 80%를 보면 왜 그런지 이해가 되지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다. 저는 T2.micro 인스턴스를 사용하고 있으므로 vCPU가 1개 있습니다. 다음 인스턴스로 업그레이드하면 가격이 거의 두 배이고 동일한 vCPU 1을 유지하지만 포인트가 더 많습니다.

간단히 말해서, 80%라는 숫자가 나를 혼란스럽게 하기 때문에 나에게 무슨 일이 일어나고 있는지 완전히 이해하고 싶습니다. 나는 이 문제에 단지 돈을 투자하고 싶지 않습니다.

답변1

의 값이 크다는 것을 눈치채셨나요 st? 이는 "도난당한" CPU 주기입니다. CPU 크레딧 잔고가 거의 또는 완전히 고갈되어 사용할 수 없는 주기입니다.

10% 사용량은 특정 기간(대략 5분) 동안의 평균 사용량입니다. 출력을 보면 top시간이 지남에 따라 100% - 도난 - 유휴 상태가 약 10%임을 알 수 있습니다.

이 시점에서는 기본적으로 사용 가능한 CPU 공간이 없습니다. 이러한 조건에서 시간이 중요한 워크로드는 일관되지 않은 응답성을 보일 것으로 예상됩니다.

t2.micro에 비해 워크로드가 너무 큽니다. 그렇지 않은 경우 기본적으로 정의에 따라 항상 초과 CPU 크레딧을 갖게 됩니다. 노력을 줄이거나 코드를 더 효율적으로 만들기 위해 뭔가를 할 수 없다면 현재 증상은 더 큰 인스턴스 클래스가 필요하다는 것을 나타냅니다.

답변2

CPU 크레딧 잔고가 비어 있으면 호스트(하이퍼바이저, 기본 하드웨어)는 가상 ec2에 프로세서 시간을 제공하지 않습니다(매우 적은 시간 제외). 이 아주 적은 양은 ssh에는 충분하지만 java라는 배고픈 괴물을 실행하기에는 충분하지 않습니다. 따라서 인스턴스는 특정 시간 동안 잠자기 상태로 있기 때문에 지연되지만 실제 세계(플레이어 포함)에서는 그렇지 않습니다.

유일한 해결책은 CPU 밸런싱을 높이는 것입니다. 즉, 인스턴스 크기를 늘리거나 원하는 방식으로 로드를 줄이는 것입니다. 인스턴스가 작동하지 않습니다훌륭한크레딧이 소진되면 기간이 종료됩니다.

관련 정보