memory.limit_in_bytesがファイルキャッシュを無視するように設定する

memory.limit_in_bytesがファイルキャッシュを無視するように設定する

cgroupを使用している場合(スタンドアロンまたはdockerまたはkubernetesの一部として)、memory.limit_in_bytesファイルキャッシュはプロセスメモリ使用量に含まれます。これは私が避けようとした意図しない副作用をもたらしました。

通常、cgroupの外部でプロセスを実行するときに複数の書き込みを実行すると、その書き込みがブロックキャッシュに蓄積される傾向があり、キャッシュがいっぱいになると書き込みを続行するのに十分なスペースがあるまでIO操作が停止します。

メモリ制限があるcgroup(dockerコンテナなど)内で実行していて、多くの書き込みをすばやく実行している場合、未解決の書き込みによってメモリ制限に達したときの動作を予測することはできません。

そこに到達したがホストのブロックキャッシュにスペースがあると、IO操作が中断されるのではなく、ENOBUFまたは同様のエラーが原因で失敗し、多くのアプリケーションが失敗します。一方、ブロックキャッシュがいっぱいになると、通常どおり一時停止されます。

memory.limit_in_bytesそのアプリケーションを変更せずにファイルキャッシュを無視したり、少なくとも一貫性のない動作を回避したりする方法はありますか?

ベストアンサー1

おすすめ記事