도커 CPU 사용 그래프가 왜 순간 치솟았는지 모르겠지만 전반적으로는 무난하게 나왔다.
import java.io.OutputStream;
import java.io.InputStream;
import java.net.Socket;
import org.apache.jmeter.util.JMeterUtils;
String serverName = "127.0.0.1";
int port = 16666;
byte[] positionData = {
0x00, 0x17, 0x05, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0xba, 0x01, 0x12, 0x09, 0x00, 0x00, 0x00, 0xa0, 0x9e, 0xac, 0x34, 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x72, 0x2f, 0x25, 0x40 };
byte[] positionData2 = { 0x00, 0x17, 0x05, 0x31, 0x2e, 0x30, 0x2e, 0x30, 0x00, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x15, 0xba, 0x01, 0x12, 0x09, 0x00, 0x00,
0x00, 0x20, 0x6a, 0xa4, 0x37, 0x40, 0x11, 0x00, 0x00, 0x00, 0x60,
0x3e, 0x77, 0x25, 0x40 };
Socket socket = null;
OutputStream out = null;
InputStream in = null;
try {
// 소켓 초기화
socket = new Socket(serverName, port);
out = socket.getOutputStream();
in = socket.getInputStream();
// 데이터 전송
out.write(positionData);
out.flush();
out.write(positionData2);
out.flush();
// 서버 응답 수신
byte[] responseBuffer = new byte[1024];
// 이 in.read가 줄때까지 기다리기 때문에 else절이 있어도 의미가 없다. 계속 기다린다고...
int bytesRead = in.read(responseBuffer);
if (bytesRead > 0) {
String response = new String(responseBuffer, 0, bytesRead, "UTF-8");
log.info("Server response: " + response);
} else {
log.warn("No response received from the server.");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 리소스 정리
try {
if (out != null)
out.close();
if (in != null)
in.close();
if (socket != null)
socket.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
사람들이 들어와서 업데이트 하려는 모습을 보려고 했던건데, 그게 아니라 그냥 방 단위로 테스트를 하는 개념으로 방향을 바꿨다.
그래서 이 제이미터의 쓰레드는 사람 한명이 아니라 방 1개가 되는 셈.
1코어 1기가 60프레임 메모리 터짐 -> 한 개의 게임서버로 방 50개를 돌리는건 절대 버틸 수 없을 듯!
1코어 1기가 30프레임 메모리 터짐 -> 역시나 한 개의 게임서버는 무리였다.
<Buffer 00 19 05 31 2e 30 2e 30 00 00 00 df 00 00 00 07 ca 01 04 08 01 10 02>
2020-30Hz-이동패킷 그래프
3434-지연300ms-카드사용 쓰레드 그래프
방 20개 60Hz
카드사용 50ms
카드사용 RTOT 3434 딜레이 10
도커 리소스 사용량
포지션 업데이트 RTOT 2525-30Hz
카드사용 RTOT 5050 딜레이 65
도커 리소스 사용량