本文へスキップ
← ガイド一覧

シングルコア?マルチコア? 自分のプログラムに合ったCPU

「コアが多いサーバーがいいのか、コア1つが速いサーバーがいいのか?」答えは、動かすプログラムがコアをどう使うかによって決まります。自分で確認する方法までまとめました。

コア、スレッド、vCPU

  • コア — CPUの中で実際に計算を行う働き手です。コアが4つあれば、4つの仕事を同時に処理できます。
  • スレッド(論理プロセッサ) — 1つのコアが仕事を2系統で受け取る技術(SMT、ハイパースレッディング)を使うCPUでは、コア数の2倍のスレッドが見えます。ただし、性能が2倍になるわけではありません。
  • vCPU — VPSに割り当てられた仮想CPUです。サーバーの中では、nprocコマンドやタスク マネージャーにこの数だけ表示されます。

プログラムが仕事を分けてはじめて複数のコアを使います

プログラムが仕事を複数の系統(スレッドやプロセス)に分けて処理してはじめて、複数のコアが一緒に働きます。1つの流れだけで動くプログラムは、コアがいくら多くても1つのコアだけが忙しく、残りは遊んだままになります。このようなプログラムでは、コア数よりもコア1つの性能(CPUの世代・クロック)が速度を左右します。

プログラムコアの使い方重要なこと
マインクラフトJava版サーバーゲームの進行(ティック)は主に1つのスレッドで処理します。チャンクの読み込みやメモリの整理(GC)などの一部の処理は、他のコアも使います。コア1つの性能
Discordボット (Node.js・Python)ボット1つはほとんどの場合コア1つで動作し、通常はCPUをあまり使いません。メモリ、止まらないように実行すること
Webサーバー (Nginx)アクセスを複数のワーカープロセスに分けて処理します。アクセスが多いときのコア数
データベース (MariaDBなど)同時に届く複数のリクエストを複数のコアで処理します。1つのリクエストは通常1つのコアで処理されます。コア数とコアの性能、メモリ・ディスク
圧縮・動画変換・コードのビルド処理を分けて複数のコアを同時に使います。(ツールやオプションによって異なります)コア数
複数のプログラムを1台のサーバーでプログラムごとに別のコアを使います。コア数

Node.jsとPythonはこのように動作します

  • Node.js — JavaScriptのコードは、基本的に1つのプロセスにつき1つのスレッドで実行されます。Webサーバーなら、pm2のクラスターモード(pm2 start app.js -i max)でコア数だけ起動して、複数のコアを使えます。Discordボットをこのように複数起動すると、同じボットが重複して実行され、コマンドに2回反応したりエラーが出たりするので、1つだけ実行してください。
  • Python — 通常インストールするPython(CPython)は、GILのため、1つのプロセスの中ではPythonのコードが一度にコア1つでしか実行されません。重い計算を複数のコアに分けるには、multiprocessingのようにプロセスを複数使う必要があります。

自分のサーバーで直接確認する

プログラムを普段どおり動かした状態で、最も忙しいときに確認するのが正確です。

Linux

sudo apt install -y htop
htop

一番上にある番号付きのバーがコアごとの使用率です。

  • バーが1本だけいっぱいで、残りは空いている → コア1つの性能が重要なプログラムです。コアを増やしても速くなりません。
  • すべてのバーが均等にいっぱいになる → コア数が足りません。vCPUの多いプランが役立ちます。
  • バーは空いているのに遅い → CPUではなく、メモリ・ディスク・ネットワークの問題かもしれません。サーバーが遅いときの点検を参考にしてください。

topを使う場合は、実行中に1を押すとコアごとに表示されます。プログラムの%CPUが100%ならコア1つを使い切っている状態で、200%ならコア2つ分を使っていることになります。

Windows

  1. タスク マネージャー(Ctrl + Shift + Esc)→ パフォーマンスタブ → CPUを開きます。
  2. グラフの上で右クリックメニューを開き、論理プロセッサに切り替えると、コアごとのグラフが表示されます。

プロセスタブのCPU使用率は、サーバー全体のCPUを100%として計算します。たとえば4コアのサーバーで、あるプログラムが25%付近からそれ以上上がらない場合は、コア1つを使い切っている可能性が高いです。

結局、何を選べばよいでしょうか?

  • 1つのコアだけが忙しいプログラム → コア数よりCPUの種類が重要です。料金プランにはシリーズごとにCPUの名前が書かれているので、比較してみてください。
  • すべてのコアが忙しいプログラム、複数のプログラムを一緒に動かす場合 → vCPUの多いプランを選んでください。
  • 長時間にわたってCPUを継続的に多く使うなら → 専用サーバーも比較してみてください。(VPSと専用サーバーの違い)
  • 数字で比較したいなら → サーバーの性能を測定するで、コア1つと全コアの性能をそれぞれ測る方法をご案内しています。

利用中のサーバーのスペックは変更できないため、別のプランが必要な場合は新しいサーバーを受け取って移行してください。

解決しない問題がある場合は、Discordのチケットでお問い合わせください。