출근전 혹시나하고 서버를 살펴보니 JVM오류가 나면서 서버가 사망했습니다. 어제 부하를 그렇게 줄 때는 어찌어찌 굴러가더니 자바가상머신의 버그로 인해서 서버가 사망했습니다.
로그를 확인하니 단순 JVM의 오류이고 안정성대신 성능을 중시해서 일부 기능을 쳐낸 제 탓(...)이었습니다.
그리고 어제 실험결과(?)로 인해 얻은 것이 무엇이냐면 JRE버전에 따른 성능이슈가 있다는 것입니다.
현재 제 서버는 OpenJDK라는 오픈소스 자바를 사용하고 있습니다. 업데이트가 수시로 이루어지는 버전입니다. OpenJDK의 특징은 최신기술과 함께 개발버전으로 구르게 됩니다. 그래서 개발자들이 좋아합니다. 그리고 보통 여러분들은 Oracle Java를 쓰고 계실겁니다. 이건 기업에서 주로 사용하는 자바이고 OpenJDK를 기반으로 Oracle이 여기저기 주물러서 만든 겁니다.
그럼차이가 어디서 나온것이냐...
Mojang이든 어디든 하여간 자바를 사용한 제품은 Oracle Java를 염두해두고 만든다는 것입니다. 심지어 Mojang에서 제공하는 매뉴얼에서는 OpenJDK를 설치 하도록 설명하지만 인터넷을 조금만 뒤져봐도 OracleJava 쪽이 빠르다는 이야기가 나옵니다. 만들기는 OpenJDK로 만들면서 테스트는 Oracle Java에서 한다고 생각하시면 되겠습니다.
(조금더 찾아보니 1.7.xx시절에는 OpenJDK대신 Sun-java-6을 사용하라는 이야기도 했었습니다. 즉, 구버전으로 구축하려면 자바의 버전부터 바꿔야한다는 것이지요.)
https://www.baeldung.com/oracle-jdk-vs-openjdk
여기보면 중간에 이런말이 써있군요.
There is no real technical difference between the two since the build process for the Oracle JDK is based on that of OpenJDK.
When it comes to performance,
Oracle’s is much better regarding responsiveness and JVM performance.
사실 OracleJDK는 OpenJDK를 기반으로 만들어져왔기에 이 둘의 기술적인 차이는 없습니다.
성능적인면에서는,
오라클의 것이 응답성이나 JVM성능이 더 뛰어납니다.
아마도 Mojang에서 이야기하는 성능 요구사항도 Oracle Java를 기준으로 이야기를 했을 가능성이 높습니다.
그러면 어제의 렉문제도 슬슬 이해가 갑니다. 1.14버전이 아닌 구버전으로 돌리면 어제 구경한 마을들이 없어지기 때문에 가능한한 구버전으로 되돌리고 싶지 않습니다. 그래서 Oracle Java로 자바환경을 다시 구성후에 스트레스 테스트를 추가로 진행하려고 합니다.
다만 문제는 무엇이냐면...
FreeBSD는 Oracle Java가 지원되지 않습니다. 그래서 얌전히 Linux로 넘어가야합니다. (Windows를 기반으로 서버를 구성하면 어제 느낀 렉의 배이상의 성능저하를 느끼실겁니다. 이래저래 Windows는 비추입니다.)
일단 Oracle JRE를 기반으로 다시 서버를 구축하기 위해서 현재 서버는 꺼진 상태입니다. 그리고 내일 중에 리눅스기반으로 다시 서버를 만들어서 1.14버전 그대로 월드와 아이템을 끌고 가보려고 합니다.
내일 다시 서버가 열리면 테스트를 다시 부탁드립니다.