Linux:メモリは無料ですが、スワップが使用されます。どうして?


11

ここにMuninの図があります。

メモリ使用量:http : //koryagin.com/w/q/memory-day.png

スワップイン/アウト:http : //koryagin.com/w/q/swap-day.png

RAMサイズがプログラムで使用されるメモリよりもはるかに大きい場合、Linuxがキャッシュを増やしてスワップを使用することを決定するのはなぜですか?


2
過去数年間のLinux VMサブシステムは、バッファスペースとキャッシュスペースを優先するように調整されてきました。アプリケーションのメモリを占有していないが、やって何がディスクにシャッフルされます。これにより、応答性とパフォーマンスが向上します。パフォーマンスの問題が発生しているのでない限り、本当に心配する必要はありません。
バートシルバース

回答:


17

サーバーには、多くの非アクティブページを含むメモリを消費するプロセスや非アクティブプロセスが存在する可能性があります。ほとんどの場合、メモリはキャッシュとして使用されるため、Linuxカーネルはプログラムの非アクティブ部分をスワップアウトすることを好みます。

この振る舞いを変更したい場合vm.swappinessは、調整可能なsysctlを試してみてください。ただし、注意してください。カーネル開発者/ディストリビューションメンテナの裏をかくのは簡単ではありません。:-)

そのスワップスパイク中にサーバーのパフォーマンスに問題がありますか、それとも好奇心から尋ねましたか?


この特定のサーバーでパフォーマンスの問題はありません。しかし、状況がそれほど明確ではない別のものでは、私は何をすべきかを考えています。既知のPHPの問題のいずれにも一致しない場合、一部のLinuxメモリ管理ロジックがPHP-FPMのセグメンテーション違反の理由になりませんか?だから、一般的に好奇心を支持します。
パベルコリャーギン

ところで、このサーバーは、スクリプトの固定セットを使用してごくわずかな量のデータを集中的に処理するため、集中的なI / Oを行うべきではありません。それでは、なぜLinuxはそのような大きなキャッシュを必要としているのでしょうか?
パベルコリャーギン

Linuxは、ファイル、ファイルメタデータ、ディレクトリエントリなどを大量にキャッシュします。commandを試してくださいslabtop
ジャンヌピッカライネン

どうもありがとう。slabtop情報をどうするかを理解するにはしばらく時間がかかります。
パベルコリャギン

上司があなたのキュービクルを通り過ぎるときにフルスクリーンで実行し、自分の目で自分を第一人者にします。:-)別の素晴らしい「ああ、確かに理解しにくいように見える」コマンドはsystat -vmstat、FreeBSD(おそらく他のBSDも)にあります。
ジャンヌピッカライネン

1

swappinessパラメータを試してみてください。システムがファイルキャッシュサイズを増加しようとしたときにスワップを開始したことがわかるように、swappinesが0でない場合、これは正常です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.