見出し画像

話題のゲーム「パルワールド」のサーバ管理をやってみた

皆さんこんにちは!
株式会社ダイサン 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を見て確認するだけ!

次回、メモリがカツカツになった時の対処方法についてご紹介します。


この記事が気に入ったらサポートをしてみませんか?