「負荷」について
Q? 重い、負荷かかってる…って何?いったいどういうことだ?の疑問に(多分)わかりやすくお答えします!そして、ラグを発生させないための、負荷軽減案内です。あなた一つの行動で、サーバーがもっと安定化し、住人みんなが楽しく住めるようになったら良いと思いませんか?
1人のプレイヤーがサーバーに大きな負荷を掛けて重くすれば全てのプレイヤーに影響が及びます。
もりのパーティ!のサーバーは企業ではなく個人が立てている程度のスペックであり、有志の寄付により運営されているサーバーだという事をよく考えましょう。
負荷(軽量化)について ¶
はてな?ふむ!辞典の続き ¶
Q? もっと詳しく!!制限されてるアイテムを置くとなんで負荷って言われているの?その他の負荷原因はなにかある?
A!!1 ★エンティティの密集
エンティティ【MOB,落ちてるアイテム,浮いてるアイテム,ブロックエンティティ等】は数が多くなりすぎると、PCリソースを圧迫して動作を不安定にする原因となる。 以下のような行動はPCに負荷を掛けます(マルチだと自分の行動が読み込まれ、もちろん他人にも影響する)。
-
負荷が発生しやすい状態【⇒例えばこうしよう の案】を記載↓↓
- 動物を大量に繁殖させて密集させ、押し合っている状態にする。 【⇒重なってちらつくようなすし詰めにしない!広いスペースで飼う!余裕を持たせる!なんなら動物を一頭ずつ分けて飼うと低負荷。】
- 村人を大量に増やす(村人のAIにより動物よりも重くなりやすい) 【⇒「交易も醍醐味でしょ」とやたらと増やさないこと!特に生活サーバー内。村人使うなら厳選して【少数精鋭】で頼むよ!多すぎる場所を発見したら強制まびきがあり得ます】
- トラップタワーで大量の敵MOBを出現させる。MOBを一度に大量に倒し、アイテムや経験値オーブを溢れさせる。
- アイテムを大量に捨てる / 大量のアイテムの入ったチェストを破壊する。 【⇒エンティティ密集が読み込まれ過度の処理速度低下につながる…自分ひとりのサーバーではありません。湧き層、処理層を調整してください】
- アーマースタンド、ボート、トロッコなどのMOBタイプの設置物。 【⇒一昔前にあったボート大量重ねおよび射出装置は害悪の極み。最近ないと思いますが、間違ってもやらないように】
- 額縁や看板などのデータ量の多い設置物。
- 旗や焚き火などのアニメーションの多いブロックの過剰設置
- 装置に必要な回路系ブロックを置きまくる 【⇒本当にその数が必要かどうか…?減らす方法はないだろうか。どうやっても大量に設置が必要な装置等は、もりパでは作らないに限る】
A!!2 ★ブロックエンティティの中でも使われやすい「チェスト」は…負荷が大きい!
もりパ!が樽を勧める理由。
◎樽の方が軽いっていうのはなんで? ⇒チェストは、インベントリ処理情報のほか、置いたときに隙間があります(マイクラで宝探しMAP等をやったことがある人は経験があるでしょう。隙間から奥のブロックがクリックできる)。 開閉時のアニメーションが必要だからでもあるでしょう。この開閉時アニメーションに起因する描画も負荷大きい(シングルよりマルチプレイが顕著)。 そして、この隙間にみえるアイテム・ブロック等の描写も必要になる為、完全な1マスブロック(フルブロック)である樽より描写負荷が高いのです。 例えば… ある人の検証によると 【60fps】ある環境で、同じ数のチェストと樽を別のところにおいて、
- チェストの方を向くと【30fps】まで処理能力が落ちるが、
- 樽の方を向いても【59fps】でほぼフレームレートが落ちなかった。 という結果もあります。
A!!3 他に、これはどうして?と思われやすい物2選
★看板 ⇒看板に関しては、設置による装飾ではなく、書かれている文字の多さが高負荷に繋がる為制限に入れています。 文字に光るイカ墨を使いまくるとさらに負荷が増えます。使いどころが大事。
★ホッパー ホッパーは、上にアイテムがないか確認する処理を常に続けているため、そのままにしておくと処理に負荷を与えます。 また、内部にアイテムが入っている際は、アイテムを送ろうとする処理もあります。
※v1.21から、フルブロック(泥などのフルブロック未満は含まない)を上に置くとエンティティ―サーチしなくなりました。 よってつなげるパイプ役だけの部分のホッパー上部には、このバージョンからは、コンポスターのような機能があるブロックより、石や土などの特殊な機能が無いフルブロックが最適らしい。
A!!4 装置
- レッドストーン回路の種類等の情報はこちらを参照して下さい。
- 大規模な装置になると稼働中は大きな負荷が掛かります。かっこいいから、とか、効率と量を求めてむやみに湧き層や処理層を増やさないで下さい。 ここは装置に特化したサーバーではないです。
装置は必ず オン/オフ のスイッチを設け、使わないときはスイッチをオフにするよう気をつけましょう。 装置、トラップタワーについてはこちらのもりパwiki(辞典内)参照のこと - レッドストーンランプをクロック回路で点滅させる、暗い部屋のでレッドストーン回路の動作など、明るさレベルの計算によって、負荷が発生することがある。 回路のある空間はレベル15まで明るくしておき明るさ変化をなくすと良いらしい。
負荷軽減を自分なりに工夫してみよう ¶
定期的に(または必要に応じて)サーバー側で行っている事ざっくり :適用しているプラグインにロスはないか、メモリ・構成の見直し、プライグインの保守・入れ替え、サーバー設定(view-distanceによる読み込みチャンク数の制限)、プラグインでの制限・軽量化の試み、エラー等が出たら原因調査、ソースコード等の確認、ゲーム内でプレイヤーがある程度分散して活動してくれる導線等整備
現もりパサーバー環境において、重いと思ったら、大体はサーバーのせいではない…です。その重さが自分だけのものであり、近くにいないプレイヤーなどサーバー全体が同じ重さやラグを感じていない限り、自分の環境か、ゲーム内の周りの何かが原因である可能性が高い。
「負荷」についての辞典A!!部分や、このページを参考にしながら、まずは自分の行動、身の回りを確認しましょう。
自分のPC、ゲーム設定による負荷軽減 ¶
◆Minecraft(バニラ)でできる軽量化
- マイクラランチャーの起動構成での設定(PC環境によって異なる為おススメがあるわけではありません。調べてみましょう。わからなければ触らないこと。)
- マイクラメニュー「ビデオ設定」で描画方法の見直し(検索して調べてみましょう!)
◆軽量化MOD
もりパwiki内リンク⇒オススメMOD:最終更新23/11/27
リンクその2⇒軽量化のスゝメ:最終更新20/6/11…更新日が古いです。同じMODを利用しており、変更があったり最新情報を編集できるかたはお願いします。
画像付きご案内 ¶
エンティティ ¶
エンティティの種類はこちらを参照して下さい。
エンティティはサーバーが重くなる大きな原因の1つです。 扱う際は必要最小限に留めましょう。
エンティティ数の見方 ¶
読み込まれているエンティティの数は、F3デバッグモードで表示することが出来る。
F3を押した時に出るE:の値は、あなたの周辺に存在するエンティティの数になっています。
そしてこの周辺のエンティティ処理は、あなたが思っている以上にサーバーへ大きな負荷を掛けます。必要以上にエンティティを増やさないように気を付けましょう。
例えばE:値を150以下に抑えるにはどうするのか。
※150は例です。直近で制限プラグインが動いていた時は上限「ブロックエンティティ: 256」としていたのでE:256までは、一応許容されているととれる。
E:の値は『視野内に入ってる数/描画距離範囲内(チャンク)の数』が表示される。
(例)「E:43/50」→近くに50このエンティティ(MOB含む)があり43個は視野内にある。
この場合、周辺のエンティティ数は172なので目標値150より過剰です。
方法としては、地道の一言・・・E値に影響するものを減らしてまたF3画面でE値を確認…という作業。
描画範囲内の数なので少し移動すると数が10くらい変動しますがそこは大体で…。
ある一か所をみて急に重くなる時は視界内にある数(E値の分子のほう)が大きくなってると思います。エンティティの密度が高いってことだね!分子が減るようにしてみましょう。
≪参考≫E値の下行にある「T」値:読み込まれているチャンク内のエンティティ(Mobやドロップアイテムを含む)の総数を表示する。E値の分母と同じってことね~。
E値の上の「C」値:読み込まれた領域のチャンクセクションの総数のうち、描画されたチャンクセクションの数。なんのこっちゃ(・ω・)気にしなくていいでしょう。
MOBを密集させない ¶
狭い範囲にMOBを押し込むと負荷が大きいです。
こちらは飼育範囲に対して、見るからにあふれ出そう(一部あふれてる…)なぎゅーぎゅーパンダさん達。
この、ぎゅーぎゅーパンダさんを見た状態でF3を開くとこのような状態です。
エンティティの数がやヴぁいですね…((;^ω^)
視界内がほぼパンダなので、パンダだけで200匹近くいることに…どうしてこんなことに…🐼
fpsが大幅に下がらなくとも、こういう場所に近づくとPCファンがめっちゃうるさくなったり熱くなります。
このパンダさんの場所に関わらず、心当たりのある飼い方をしているプレイヤーは、増やしすぎないように管理してくださいね。
また、読み込み描写に加えてMOB同士で反発し合ったり水に浮上したりします。その処理はとても負荷が大きく、容易にサーバーを重くします。
例えば16×16の範囲で約16匹程の余裕を与え、水にも浮かないように気をつけましょう。
「ごっつんこは恐ろしい」 ¶
MOBとMOBの接触判定(ぶつかったMOB同士の動きの計算)処理は、MOBが2匹だと2回で
済すむが、
3匹がごっつんこで6回、4匹だと12回、5匹だと20回…
匹数が増えると、飛躍的に計算量が多くなります。狭いところではそれだけ接触しやすい。
また接触して跳ね返ったものがさらに接触する悪循環。計算量だけでなく計算頻度も多くなります。
経験値トラップが重くなるのも、エンティティ量に加えてこれが一因とされています。
水流式だと水流処理の複合。
村人を増やし過ぎない ¶
バージョン1.14で村人の仕様は大きく変わりました。他のMOBよりも多くのAI処理が働くのでサーバーへ大きな負荷を掛けます。都市部で管理する事は避け、周辺に他の村がないかよく確認し、必要以上に増やさないよう気をつけましょう。
村人は本当に重いので一つの街で5(~10)人程度に抑えるくらい少数で管理しないとサーバーがとても重くなります。
(サーバー側で村人の挙動を軽くする?ようなシステムを入れているようですが、増やしすぎないようにご協力ください)
ブロックエンティティ ¶
ブロックエンティティの種類はこちらを参照して下さい。
通常のブロックよりもデータ量が多いので、ブロックエンティティが多く存在するチャンクを読み込む時は、サーバーに大きな負荷が掛かります。都市部で大量のチェスト類を管理する事は避け、倉庫は人気のない場所に作りましょう。
ホッパーを詰まらせない ¶
トラップ等によるアイテム処理や自動焼き機などはなるべく詰まらせないように気を付けましょう
Minecraftの仕様上、ホッパーは中にアイテムが存在し続ける限り稼働し続けます。ホッパーは連結数を少なくし、詰まらせないように気を付けましょう。
最後に ¶
とくに全プレイヤーが訪れるといってもいい「資源サーバー初期スポーン」は考えなしにいろいろなブロックや案内看板、空チェストを置きまくると重くなりやすいです。 皆さんで協力して快適な環境を作りましょう! 装置自信ニキなのであれば、自由に装置を作れないと嘆くより、楽しみ方を他に見つけましょう。 例えば、もりパという環境・制限の中で、いかにスタイリッシュに装置を組めるかということを楽しんでいるプレイヤーもいます。 サーバーで遊ぶ全てのプレイヤーの為にもご協力をお願いします!
【ちょっと細かい話 コーナー】 ¶
《前置き》 興味のある人だけどうぞ。 この記事の執筆者は専門家ではありません。詳しい人の記事を読んだりして、こういうことなんかな~ってある程度素人ではこういう理解をしている、という内容です。 詳しい方が居たらわかりやすい情報提供を別途お願いします💛
《ボトルネックリスクになるもの①②》 ¶
システムの処理速度や性能を制限する要因となる部分のこと。その一部を紹介してみる。
①プレイヤー数 playerがどこから接続してるか、スキン(プロフィール)なりプレイヤーのインベントリ、経験値等、これらのプレイヤーの【ステータス】に関する情報の量は、 1人辺りそんなに大きくありません(ゲーム自体による情報量の制限機能)。 メモリに対して、マルチではやはり【人数】の方が分かりやすく影響します。
②チャンク情報によるメモリ消費 チャンクには配置されている地形やエンティティ(Mobや動物、村人、アイテム)など、プレイヤーとは比べ物にならないほど多くの情報があります。 プレイヤー1人が前進すると…
- プレイヤーから一定距離離れた後方のチャンクがサーバーからアンロードされるかどうか
- 前方のチャンクをロードするかどうか が判定される。 既に別のプレイヤーがいる場合、サーバー上ではロードされるチャンクが徐々に増えていく(メモリで保持される)可能性が高くなっていきます。
……………………………………………………………………………………………………………………………
《対策》チャンク/エンティティの読み込み制限(データ量を減らす) ¶
固定の配布マップやアドベンチャーワールドの場合は、複数のプレイヤーが近くにいるため、サーバが同時に覚えておく必要があるチャンクの数が減りメモリの消費量は最小限に抑えられます。 プレイヤーが各々別の場所にいるもりパ!のようなサバイバルワールドの場合は、ロードするチャンクの量が多くなるため、どうしてもメモリ消費量が増大します。
- ワールドの大きさを支障のない範囲にする
- サーバーの view-distance によって読み込むチャンク数をコントロール。 サーバー側での「描画距離」設定は負荷軽減の一つの手段です。もりパはこの描画距離を負荷を抑えるような距離にしているため、遠くを表示させていません。 メモリー不足が発生した場合、調整の為サーバー側でview-distanceを変えることはあり得ます。 過去にも幾度か実行 されています。
- チャンクの読み込み制限はメモリの消費量を減らすことができます。 が、一方で、より早くアンロードされたチャンクがプレイヤーの移動によってまたすぐにロードされる可能性があるため、CPUの負荷を増大させる可能性があります。 ※ロードの頻度が早くなるということは、「CPUに負荷がかかる」ということです。 自分のサーバーではどういう負荷が発生しやすいかを観測し、制限の設定をいい塩梅にする必要がある。
《ボトルネックリスクになるもの③》 ¶
③通信速度…インターネット帯域
マイクラで、プレイヤーが何かする度に(サーバーで何か発生する度に)サーバーとクライアントの間に【パケット】が流れます。
《パケットとは》:「小包み」のようなイメージ単位。ネット上でデータを送受信する際に小さい単位で分割送信することで、大量のデータをスムーズに送る仕組み。 ネット閲覧も、メールも、インターネットサービスのほとんどがこの通信によって成り立っています。 オンラインゲームでは、プレイヤーの操作やゲームの情報がパケットとして送受信され、リアルタイムな交流が可能になります。
- Minecraft の場合は、もちろん、まずはプレイヤーが動いたり、視点を動かしたときに送信されます。
- そして、動きや視点に変化がない場合は不必要の情報分は含まれませんが、プレイヤーが動いていなくても1秒に一度、座標を含むパケットはサーバーに送信します。 これを「アイドルパケット」と呼び、プレイヤーが動いていないよ~ってことを示します。
- 1プレイヤーあたりの座標同期用パケットは、クライアント(プレイヤーPCのこと)からサーバ方向へ流れます(サーバ視点ではダウンロード方向)。 座標の同期パケットは 80 Bytes 程度のサイズらしいです(詳細はプロトコル仕様を参照)。
- サーバはプレイヤーから座標同期用のパケットを受信すると、それを視界内の残りのプレイヤー全員へ連携します(サーバ視点ではアップロード方向)。 また、プレイヤーが必要なチャンクを読み込んだ場合は数キロ Bytes のチャンクデータがサーバからクライアントへ分割/圧縮されて流れます(サーバ視点ではアップロード方向)。 ※ちなみに、サーバーソフト側でそのデータをどのように分割/圧縮するかの設定があるかの知識は、執筆者にはありません!
F3でデバック画面を開いたとき、例だと上から3行目(サーバーソフトウェア名の隣)をみてみましょう。
tx→クライアント(プレイヤーPC)が送信したパケット数。 rx→サーバーからクライアントが受け取ったパケット数。
通常の場所(小さい集落の脇に建てた、内装がある少し大きめの建築)に立っているだけだと、このくらいの数値です。
"Paper(Velocity)"server, 27tx, 78rx
さてここで、注目するのはぎゅーぎゅーパンダF3画面
"Paper(Velocity)"server, 36tx, 3600 rx
情報量がすごいために、たくさ~んのパケをサーバーがPCへとアップロード連携(流)している状態でしょう。 この送る能力が低いとそもそも安定したサーバの稼働自体が厳しいのだとおもいます。
移動パケットだけではなく、ブロックの破壊情報など様々なパケットがサーバからクライアントへ流れるわけだが高速移動者がいると、サーバーから周りのプレイヤーが受信するパケットrxの数値が上昇しやすい、気がする。
- 自分がある場所に立ってパケット数rxが安定している時、相手にE値が多いところに移動してもらい変化をみた。
◎いってもらった後その場に「静止してるだけ」だと上昇は少しだった。
◎そこから試しに「エリトラ高速で飛んで移動し続けてみて」と頼んだとき数値が50以上は増えた。
小分けにして送信しているパケットにしても、多すぎたらインターネット帯域がその分必要なわけで…。 一度に大量の通信をできるようにサーバー側も工夫して設定なりしているわけですが…
【帯域】とは…およそ通信速度と考えていいらしい。厳密に知りたければ調べよう。 記号だと 帯域「≒」通信速度
ここまでの感じ、IT素人の理解としては
- プレイヤー1人が1チャンク移動すれば座標パケットだけでなく、チャンクデータも送信する必要があるので100人がサーバーにいる場合、tick含め諸々計算で瞬間的には 1Gbps 近い帯域が必要。 …つまりぃ、大量のパケットを送るためには、サーバはに広い帯域(速い通信速度能力?)が必要。 サーバー側で必要量を想定して設定しているため普段はそうそう感じないが、実際はパケット数はプレイヤー人数にも比例して増えているため、マルチでは同接人数が多くなるだけでも、水面下で重くはなるのですね。
- 記念写真とかで人数60人以上集まって、結構重くなりだしてるのに動く人に注意をする、というのはこのように理由があるのですね。 「重いとか言いながら動くのはよせ、余計な負荷になる!落ち着きなくむやみにエリトラで飛んだり花火を使ったりするなよ~」という忠告に素直に従ってください。 その行為が、マジ余計な負荷影響を与えてるからね?!ってことですな…。
《③帯域問題の対策》 ¶
帯域を増やすのは…難しい!
-
企業でもなくば、簡単にできることではない!増やすための高度なサービスにはそれだけお金が必要に… じゃあほかに手段は?
-
先に書いた通り、プレイヤーが密集している場合、プレイヤーが自分以外のプレイヤーに情報を連携するために 人数^2 に比例したパケットが必要。 活動地域が分散すれば、相互にパケットを交換するプレイヤーが減るため、その分必要な帯域は減ります。
分かれることによって読み込むチャンクが増えることもあり、目に見えて確実に減るぜ!とも言えませんが手段の一つになれます
-
チャンクの量、チャンクの送信レート、視認できるエンティティ数を調整することで必要なインターネット帯域を減らす。 だがサーバー側で調整したところで、限界はあり、プレイヤーのまわりにエンティティがありすぎればやはり低下要因になるのでプレイヤーの協力も不可欠。 ふむ…
また、システム処理・性能低下の要因としては
②メモリリスクよりは③帯域問題のほうが深刻になりやすい、ということです。
《ちょっと細かい話 とりあえずのまとめ》 ¶
なるべく大勢に遊んで欲しいから、サーバーとしてはなんとか物理リソース(メモリやCPU)を管理、他にも軽量化を実践してくれているわけですが もりパ!は個人の環境下で個人及び寄付をもとに成り立っているサーバー運用のため、何があってもヘッチャラよ!という事にはなれません…。 そこに、エンティティ数ヤバくね?チャンク読込なんかめっちゃされてね?等…想定以上の行動をされるとサーバーに過負荷がかかる(サーバーを動かしてくれてるPCアツアツに燃える)やら、クライアントによっては回線速度がぁぁってなったりしてカックカクになってゆくわけで…ある。
最後に ¶
もりぱwikiのサーバー仕様のページに、サーバーを快適に運用するために使用しているサーバーソフトについてを紹介しています。
⇒「サーバー仕様」ページへ
《おまけ》 ¶
ほえ~っ…そういうことかぁ…て思ったこと。
Q:ぬるぬる動けてるのに他のプレイヤーから挙動がカクついてるよ、って言われる時があるのはなぜ? (もしくは自分からみて他人がカクついているって時も一緒と思う)
A:クライアントから見てスムーズに動いているように見え(感じ)ても、回線やサーバの調子が悪いと他のプレイヤーへの情報連携が遅れるため、他のプレイヤーから見ると動きが遅延したりカクカクして見える (どんなに性能が良いサーバ・回線でもそもそも情報連携が行き届くまでの間は少し遅延している)
Q:プロトコルってなんじゃ?
A:マインクラフトでは、独自のTCPベースのプロトコルが使用されており、ゲーム内の通信が行われています。 プロトコルとは、通信を行うための「手順」や「規約」。サーバーから情報を読込のに必要な決めごと。 TCP(Transmission Control Protocol)は、データを確実に送受信するために使用される通信プロトコル。主にインターネットで使われ、信頼性の高いデータ転送を保証します。 よく比較されるUDPとは異なり、TCPは安定した通信を重視しますが、UDPは遅延や処理の効率に優れています。 マインクラフトでは、Java版でTCPが、統合版ではUDPが使われており、両者のプロトコルには互換性がありません。
※プロトコルについてはこちらを参考にしました
最終更新日:2025/5/15