話題のゲーム「パルワールド」のサーバ管理をやってみた
皆さんこんにちは!
株式会社ダイサン note担当者です。
みなさん、最近話題のゲーム「パルワールド」遊びましたか!?
パルワールドは4人以下のメンバーで遊ぶ場合にはサーバを立てる必要がないのですが、それ以上のメンバーで遊びたい場合はサーバを立てる必要があります。
今回友達と話していて、10人くらいで遊びたい!という話になったので、レンタルサーバを借りて、パルワールドを遊ぶことになりました。
パルワールドはまだまだ開発途上のゲームで最適化が進んでいないため、複数人がサーバにログインして遊ぶとメモリ使用率がグングン上がって
いきます。
パルワールドの推奨スペックとしてメモリが「32GB」となっているのですが、32GBのレンタルサーバ借りようとするとまぁまぁな額に。。。
メモリ16GBのサーバ(OSはLinux)で妥協して契約しました。
遊びながらメモリを監視していると、メモリ使用量が上がっていくので、
自宅にいなくてもサーバの状態を確認できる様、
サーバの情報をDiscordに送るプログラム(シェル)を書いてみました。
vi ~/get_memory_info.sh
#!/bin/bash
cd $(dirname $0)
readonly WEBHOOK="DiscordのWebhookURL"
MEMORY_STATUS_INFO() {
# freeコマンドの必要な情報は2行目にあるので、そこを抽出する
local free=($(free -m | head -2 | tail -1))
local i
local color="4CAF50" # 緑色(16進数)
# メモリの残りが1000MBを切ったら
if [ ${free[3]} -lt 1000 ]; then
color="f44336" # 赤色
fi
# メモリ使用率を % で表示できるように計算
local used_rate=$("scale=1; ${free[2]} * 100 / ${free[1]}" | bc)
# カンマ区切りで表示できるように整形
for (( i = 1; i < ${#free[@]}; i++ )); do
free[$i]=$(printf "%'d" ${free[$i]})
done
# Webhookで送れる形式を作成
cat << EOF
{ "content": "Memory Status",
"embeds": [{
"title": "$(date +'%Y/%m/%d %H:%M')",
"description": "Memory used rate : ${used_rate} %",
"color": $(echo "obase=10;ibase=16; ${color}" | bc),
"fields": [
"name": "total", "value": "${free[1]} MB", "inline": true },
"name": "used", "value": "${free[2]} MB", "inline": true },
"name": "free", "value": "${free[3]} MB", "inline": true },
"name": "shared", "value": "${free[4]}", "inline": true },
"name": "buff/cache", "value": "${free[5]} MB", "inline": true },
"name": "available", "value": "${free[6]} MB", "inline": true }
]
}]
}
EOF
}
# Discordにメモリ状況を送信
curl -H "Content-Type: application/json" -X POST -d "$(MEMORY_STATUS_INFO)"
このシェルを実行してみると、結果がDiscordへ送られることが確認できました!
あとは、これを定期的に実行してあげれば良いので、「クーロン」という機能をつかって、自動化します。
vi /etc/crontab
# 分 時 日 月 曜日 ユーザ コマンド
0 * * * * root sh ~/get_memory_info.sh
30 * * * * root sh ~/get_memory_info.sh
24時間、0分と30分に実行されるようになりました!
あとは自分の好きなタイミングでDiscordを見て確認するだけ!
次回、メモリがカツカツになった時の対処方法についてご紹介します。