カテゴリー: VPS・サーバー

  • 月€8のVPS 1台で自動処理を60本動かした実測(Contabo・41日連続稼働)

    月€8のVPS 1台で自動処理を60本動かした実測(Contabo・41日連続稼働)

    月€8のVPS 1台に、cron登録の自動処理を60本と、Webサイトを4つ同居させて41日間動かした実測値をそのまま公開します。CPUもメモリも余っていて、実際に詰まったのは別のところでした。

    使っているサーバーの中身

    Contabo(アジア・シンガポール拠点)のVPSを月€8.00で契約しています。スペックと環境は以下のとおりです。

    CPU     : 4コア
    メモリ  : 7,941MB
    ディスク: 72GB
    OS      : Ubuntu 24.04
    Web     : Apache 2.4
    言語    : PHP 8.3
    DB      : MariaDB

    この1台の上に、cronに登録した自動処理が60本と、Webサイトが4つ(WordPress 2つ、Node.jsアプリ2つ)が同居しています。専用サーバーを分けたりはしていません。全部同じ箱の中です。

    60本の内訳

    • SNSの自動運用:50本
    • YouTube関連:13本
    • ブログ記事の自動生成・投稿:3本
    注意

    この内訳を単純に足すと60本を超えます。1本が複数の役割にまたがっていたり、数え方が重複していたりするためで、どれがどこに対応するのかは自分でも正確に把握できていません。cronのエントリ数として60本、という数字だけが確かなところです。

    41日間、無停止で動いた

    実測

    41日 連続稼働
    再起動なし。60本のcronとWebサイト4つを載せた状態で

    そのときのリソース使用状況です。

    • メモリ:7,941MB中 1,442MB(残り約6.3GB)
    • ディスク:72GB中 22%
    • load average:1.34 / 1.76 / 1.92(4コアに対して)
    メモリ使用量(実測)
    メモリ使用量(実測)

    load averageは4コアに対して最大でも1.92なので、コアが埋まりきってはいません。メモリに至っては8割以上が空いたままです。「自動処理を60本も動かしている」と言うと重そうに聞こえますが、実際の数字はこれです。

    同時に動いているPythonプロセスは2つだけだった

    理由がはっきりしたのは、稼働中のPythonプロセスを数えたときでした。60本あっても、同時に動いていたのはたった2つです。

    cronは実行時刻を24時間に散らしてあります。60本という数字は「登録数」であって「同時実行数」ではありません。ここを混同すると、必要なスペックを何倍にも見積もってしまいます。

    ポイント

    台数やスペックを決めるときに見るべきは、cronの本数ではなく同時に走る本数です。散らせるものを散らしておけば、1台に載る量は本数から想像するより多くなります。

    唯一、素直に載らなかったのがffmpeg

    例外は動画生成です。ffmpegはCPUを使い切ろうとするので、そのまま走らせると動画の書き出し中に同じサーバーのWebサイトが遅くなりました。cronを散らす対策では解決しません。1本でCPUを持っていくからです。

    失敗したこと

    ffmpegを制限なしで実行し、書き出し中に同居しているWebサイトのレスポンスを落としました。自動処理側が正常に完走していても、外から見えるサイトが遅くなるので、影響としてはこちらのほうが厄介です。

    いま入れている対策は、実行コマンドの前にこれを付けるだけです。

    taskset -c 0-1 nice -n 10 ffmpeg ...
    • taskset -c 0-1 … 使うコアを0番と1番の2つに限定する
    • nice -n 10 … 優先度を下げ、他の処理に先を譲らせる
    うまくいったこと

    4コアのうち2コアをffmpegに割り当てず残しておくことで、動画の書き出し中でもWebサイトが重くならなくなりました。追加費用はゼロ、コマンドの頭に一言足すだけです。

    本当のボトルネックはサーバーではなかった

    ここまでの数字を並べると分かるとおり、この構成で先に限界が来たのはCPUでもメモリでもディスクでもありません。実際に詰まったのは、各サービスのレート制限でした。

    サーバー側にはまだ6.3GBのメモリと2コア分の余力があります。それでも本数を増やせないのは、投稿やAPI呼び出しの回数に外側から上限がかかるからです。スケールさせたいときに買うべきものが、サーバーではなかったというのがこの41日で一番はっきりした点です。

    分かっていないこと

    • 41日を超えて何日まで無停止でいけるのかは、まだ分かりません。単に41日時点で観測した値です。
    • cron 60本と内訳の数字が一致しない件は、未整理のままです。
    • 今の余力(メモリ6.3GB、2コア)で自動処理をあと何本載せられるかは、レート制限が先に来るため試せていません。
    まとめ

    • 月€8・4コア・7,941MBのVPS 1台で、cron 60本とWebサイト4つを41日間無停止で運用できました。
    • メモリは1,442MBしか使っておらず、load averageは4コアに対して1.34/1.76/1.92でした。
    • 60本あっても同時に動いていたPythonプロセスは2つ。実行時刻を24時間に散らしているためです。
    • ffmpegだけは例外で、taskset -c 0-1 nice -n 10 で2コアに限定し優先度を下げないと、同居サイトが遅くなりました。
    • 限界を決めたのはサーバー性能ではなく、各サービスのレート制限でした。