web-dev-qa-db-ja.com

数百ギガバイトの仮想メモリ使用量を示す上部

新しい仮想マシンでのtopは、私のプロセスが100 GBの仮想メモリを消費していることを示しています。 オーバーコミットのために可能 であると読みましたが、少し多すぎます。特にVMに6 GBの実メモリ、2 GBのスワップ、および単一の40 GB HDパーティションがある場合、私はこのようなものを見たことがありません。

unreal_memory

101 GB VIRTの面白いプロセスはEclipse IDE(数分前に開始))であり、98 GB VIRTのWebKitWebProcessがあります。他のすべてのプロセスには、約1〜2 GBの正常なVIRT値があります。 。3つのツールすべてがそれに同意しているようです:tophtopおよびps

  • プロセスがそれだけの仮想メモリを要求する正当な理由はありますか?
  • そのような動作はシステムに有害ではありませんか?
  • 合計仮想メモリの現在の制限は何ですか?

更新

詳細:
Linux 4.15.0-38-generic x86_64 GNU/Linux、Linux Mint 19 Tara
Java HotSpot(TM)64ビットサーバーVM(ビルド25.191-b12、混合モード)
バージョン:2018-09(4.9.0)ビルドID:20180917-1800

/ proc // mapsの内容は

00400000-00401000 r-xp 00000000 08:01 132092                             /usr/lib/jvm/Java-8-Oracle/jre/bin/Java
00600000-00601000 r--p 00000000 08:01 132092                             /usr/lib/jvm/Java-8-Oracle/jre/bin/Java
00601000-00602000 rw-p 00001000 08:01 132092                             /usr/lib/jvm/Java-8-Oracle/jre/bin/Java
014fc000-02ebe000 rw-p 00000000 00:00 0                                  [heap]
c0000000-d0000000 rw-p 00000000 00:00 0 
d0000000-100000000 ---p 00000000 00:00 0 
100000000-1012c6000 rw-p 00000000 00:00 0 
1012c6000-140000000 ---p 00000000 00:00 0 
7ef800000000-7ef800004000 rw-p 00000000 00:00 0 
7ef800004000-7ef8000ec000 rw-p 00000000 00:00 0 
7ef8000ec000-7ef800100000 rw-p 00000000 00:00 0 
7ef800100000-7f0800000000 rw-p 00000000 00:00 0 
7f0800000000-7f1000000000 ---p 00000000 00:00 0 

表示されている最後の2行lineは、0x7f0800000000 - 0x7ef800100000 ≈ 68.7e9のように犯人のようです。私が見つけたものから、それは許可のないマップされていないプライベートリージョンです。私が言えるのはそれだけです..。

4
maaartinus

ほとんどの場合、インデックスを作成できるすべてのファイルをmmapしています。 Kafka数千のファイルのマッピング)でも同様ですが、通常、仮想フットプリントははるかに高い(〜10x)です)。以下を実行できます。

cat /proc/{PID}/maps

({PID}はEclipseプロセスIDです)。これが当てはまるかどうかを確認します。実際にそうである場合は、vm.max_map_count in sysctl仮想フットプリントが大きすぎる場合。

4
tk421