feat: TPS/MSPT/메모리 성능 모니터링 API 추가

- ServerStatus에 tps, mspt, memoryUsedMb, memoryMaxMb 필드 추가
- getMspt() 함수 구현 (averageTickTimeNanos 기반)
- getTps()를 mspt 기반으로 리팩토링
This commit is contained in:
Caadiq 2025-12-23 12:46:03 +09:00
parent d4faf31b73
commit f9fa94bf38
2 changed files with 36 additions and 0 deletions

View file

@ -22,6 +22,10 @@ class ServerDataCollector {
/** 전체 서버 상태 수집 */
fun collectStatus(): ServerStatus {
val server = getServer()
val runtime = Runtime.getRuntime()
val memoryUsedMb = (runtime.totalMemory() - runtime.freeMemory()) / 1024 / 1024
val memoryMaxMb = runtime.maxMemory() / 1024 / 1024
val mspt = getMspt(server)
return ServerStatus(
online = server != null,
@ -29,12 +33,40 @@ class ServerDataCollector {
modLoader = getModLoaderInfo(),
difficulty = getDifficulty(),
uptimeMinutes = getUptimeMinutes(),
tps = getTps(mspt),
mspt = mspt,
memoryUsedMb = memoryUsedMb,
memoryMaxMb = memoryMaxMb,
players = getPlayersInfo(),
gameRules = getGameRules(),
mods = getModsList()
)
}
/** MSPT (Milliseconds Per Tick) 계산 */
private fun getMspt(server: MinecraftServer?): Double {
if (server == null) return 0.0
return try {
val averageTickTimeNs = server.averageTickTimeNanos
val mspt = averageTickTimeNs / 1_000_000.0
"%.2f".format(mspt).toDouble()
} catch (e: Exception) {
0.0
}
}
/** TPS (Ticks Per Second) 계산 */
private fun getTps(mspt: Double): Double {
if (mspt <= 0) return 20.0
return try {
// TPS = 1000ms / msPerTick, 최대 20
val tps = 1000.0 / mspt
minOf(tps, 20.0).let { "%.1f".format(it).toDouble() }
} catch (e: Exception) {
20.0
}
}
/** 마인크래프트 버전 */
private fun getMinecraftVersion(): String {
return try {

View file

@ -10,6 +10,10 @@ data class ServerStatus(
val modLoader: String,
val difficulty: String,
val uptimeMinutes: Long,
val tps: Double, // TPS (Ticks Per Second)
val mspt: Double, // MSPT (Milliseconds Per Tick)
val memoryUsedMb: Long, // 사용 중인 메모리 (MB)
val memoryMaxMb: Long, // 최대 메모리 (MB)
val players: PlayersInfo,
val gameRules: Map<String, Boolean>,
val mods: List<ModInfo>