動作中のPC上のLinuxでのRAMの不足:最適化とフリーズ時のアクション

どのオペレーティングシステムでも、多くの場合、十分なRAMがありません。 Linuxマシンのハードウェアリソースの増加を節約し、メモリ不足の場合に多かれ少なかれ快適な条件下でLinuxコンピューターを使用し続ける方法を検討します。



この状況は典型的なものです。十分なRAMがないときに使用され始め、HDD、つまり読み取り速度の遅いハードディスクに配置されるスワップ(スワップ、スワップパーティション)があります。 このような状況では、オペレーティングシステムの速度が低下し始め、マウスカーソルがフリーズし、隣接するttyに切り替えることが困難になります。 なんで? Linuxカーネルスケジューラは、RAMにアクセスするまで実行中のプログラムで何らかのアクションの要求を実行できないため、次のアクションも実行できず、ディスクからの読み取り要求のキューが形成され、システムが正確にフリーズします。そのキューの処理は、ユーザーが望むものよりはるかに遅いです。



そのような時点でhtop



またはuptime



を開始すると、プロセッサコアのワークロードが低いにもかかわらず、負荷平均(LA)インジケータが非常に高くなります。 高負荷平均と低プロセッサ負荷の組み合わせは、プロセッサキューが詰まっていることを示します。



多くの場合、インターネットでLinuxカーネルパラメーターvm.swappiness



を変更することをお勧めします。 次のように、システム上の現在の値を確認できます。



sysctl vm.swappiness







答えはほぼ確実に60になります。 つまり、空きRAMの使用率が100% -60 %= 40%に達すると、Linuxカーネルはめったに使用されないRAMページをスワップし始めます。 RAM負荷が90%に達するまでスワップの使用が開始されないように、たとえばvm.swappiness = 10に設定することが推奨されることがよくあります。 実際、vm.swappinessに触れる必要はありません理由によりデフォルトで60を設定しているLinuxカーネル開発者よりも賢くありません 。 なんで?



RAMが4 GBのみで、そのうち3 GBが現在使用されており、vm.swappiness = 10で、ハードディスク(HDD)のスワップが0%ビジーであり、ブラウザーで重いサイトを開くと想像してください。使用可能な無料の1 GB、たとえば2 GBよりも大きくなります。 オペレーティングシステムは、少なくとも0.5 GB(実際にはそれ以上)のスワップを緊急に送信し始め、必要な量のRAMをブラウザーに割り当てることができます。 この手順が最優先事項となり、マウスカーソルの動きさえ犠牲にして、できるだけ早く実行する必要があります。 待っています。 5分が経過すると、RAM(スワップ)が配置されている低速のハードディスクへのアクセスキューの100%のロードの手順が完了したため、システムがハングします。 デフォルトのvm.swappiness = 60では、めったに使用されないメモリページが事前にスワップでダンプされ、5〜10分間の急激なフリーズは発生しません。

UPD。 コメントは、これがvm.swappinessの正確な説明ではないことを示唆しています。



zramおよびスワップの優先順位



RAMコンテンツのzram透過圧縮を有効にすることをお勧めします 。 Ubuntuでは、これは自動化されています;パッケージをインストールするだけです:



sudo apt install zram-config







以下、RosaのFedoraディストリビューションはすべて同じですが、zram-configの代わりに-



zram-start







Ubuntuのsystemd zram-config



は、パッケージのインストール時にスタートアップに自動的に追加され、システムの再起動時に開始されます。 手動で開始するには:



sudo systemctl start zram-config







停止:



sudo systemctl stop zram-config







自動実行から削除:



sudo systemctl disable zram-config







自動実行への追加:



sudo systemctl enable zram-config







起動すると、zram-configは合計RAMの50%に等しい数を取得し、1つの仮想デバイス/ dev / zramNを作成します。ここで、Nはプロセッサコアごとに0から始まり、各/ dev / zramNのボリュームは合計RAMの50%ですメモリをプロセッサコアの数で割った値。 これは、プロセッサコア上のRAMの内容の圧縮を並列化するために行われます。 私の知る限り、最新のLinuxカーネルでは、1つのデバイス/ dev / zramNで十分であり、それ自体が並列化されますが、zram-configスパークリング作業には完全に満足しており、私はそれを手に入れたくないです。



swapon -s



は、優先度に関係するすべてのスワップをリストします。 優先度の高いスワップが最初に使用されます。 既にディスクスワップがあり、zramが有効になっている場合、上記の自動コンフィギュレーターパッケージの場合、すぐに使用できる優先順位は正しいです。 たとえば、ディスクスワップには-1があり、すべての/ dev / zramNには5があります。したがって、zramが最初に使用され、次にディスクが使用されます。



ちなみに、zramはスマートフォンでよく使用されます。デフォルトの圧縮方式lz4を使用すると、プロセッサーに顕著な負荷がかかることはありません。



/etc/fstab



スワップの優先度を指定することもできます。 6 GBのRAMを搭載した稼働中のコンピューターでこれがどのように行われたかの例を示します。



 $ cat /etc/fstab | grep swap # swap  SSD UUID=844fc9fb-509d-4dab-9ea5-a3d5142f76d8 none swap sw,pri=2 0 0 # swap  HDD   UUID=b643c42a-0abd-4f35-8865-7a51be5769e8 none swap sw,pri=1 0 0
      
      





マウントオプションpri=X



は、スワップの優先順位を設定します。 zramも有効にすると、画像は次のようになります。



 $ swapon -s Filename Type Size Used Priority /dev/sdb3 partition 1005564 0 2 /dev/sda2 partition 6655996 0 1 /dev/zram0 partition 690764 0 5 /dev/zram1 partition 690764 0 5 /dev/zram2 partition 690764 0 5 /dev/zram3 partition 690764 0 5
      
      





まず、zramでスワップします。つまり、スワップに外部デバイスを使用せずにRAM内で圧縮されます。次に、SSDで小さなスワップを使用します。 HDDへのほぼ6 GBのスワップはほとんど使用されませんが、RAMの負荷が高い状態でコンピューターをスリープモードにしたい場合に必要になります。 (実際には私のZRAMは無効になっています)。



4 GBのRAM(Xubuntu zram-config



)を搭載したオフィスPCでは、常にzram-config



パッケージを配置します。 観察によれば、ChromiumはRAM内で非常によく圧縮されているため、zramを使用すると、アイロンをアップグレードすることなく作業がはるかに快適になります。



RAMをオーバーロードするプログラムをすばやくノックアウトします。 SSH用のRAM予約



vm.swappiness = 60であっても、一部の機能(通常はブラウザー)が大量のRAMを必要とし、システムがフリーズすることがあります。 これは非常に簡単に解決されます。キーボードショートカットAlt + SysRq(PrintScreen)+ Fを使用すると、oom_killerが強制的にプロセスをオフにし、強制終了します。 1回の呼び出しに対して厳密に1つのプロセス。厳密に何かが強制終了されます。 連続して何度もクリックすると、ほとんどの場合、グラフィカルセッションが再起動します。 プロセス強制終了イベントはdmesg



赤のdmesg



反映されます。



ただし、Magic SysRqと呼ばれるこの機能は、ほとんどのディストリビューションですぐに使用できます。これは、特権のないユーザーがすべてのプロセスを強制終了できるためです。 kernel.sysrqカーネルパラメーターkernel.sysrq



、次のように現在の値を確認できます。



sysctl kernel.sysrq







Alt + SysRq + Fを使用するには、kernel.sysrq = 1が必要です。 これを行うには、/ etc / sysctl.confファイル(通常は/etc/sysctl.d/99-sysctl.confのシンボリックリンク)および/etc/sysctl.d/*.confにあるカーネルパラメーターを変更します。 別のファイルを作成することをお勧めします。



sudo nano /etc/sysctl.d/99-dumalogiya.conf







書き込みます:



 #    Alt+SysRq,  .. Alt+SysRq+F    OOM Killer kernel.sysrq = 1 #  8    ,       ,      SSH  . vm.admin_reserve_kbytes = 60192
      
      





Ctrl + O、Enterを押して保存します。



ブラウザーの場合、Chromium Alt + SysRq(PrintScreen)+ Fは、ブラウザー自体を閉じずに1つのタブを削減します。これは非常に便利です。







Magic SysRqキーボードショートカットはLinuxカーネルによって直接インターセプトされるため、Xサーバーがプロセッサキューのためにハングした場合でも機能します。



vm.admin_reserve_kbytes-これはキロバイト単位のRAMのサイズであり、SSHなどの管理上のニーズのために無料で保証されます。 デフォルトは約8 MBです。 ほとんどブルドーザーから60192を増やすことをお勧めします。



/etc/sysctl.d/99-dumalogiya.confファイルをdumalogiya-sysctl debパッケージにパックしました。これをリポジトリに入れてすべてのコンピューターに配置しました。非常に便利で、構成を集中的に更新でき、各マシンを手動で構成する必要はありません。 単純なdebパッケージを「膝の上で」構築するための指示として、 https://debian.pro/1390をお勧めします 。 リポジトリは、Webサーバーディレクトリ内のファイルとフォルダーの構造を単純に作成する、適切に使用して作成されました。



All Articles