Javaプロセスのメモリとシステムメモリの占有に関する研究

10707 ワード

1.質問1-Xms4g -Xmx4g -Xmn1gjavaプロセスを開始します.では、このプロセスがマシンメモリを占有する状況はどのようなものですか.
A:Glogとtop、pmapを見て、機械のメモリの使用状況を見て、以下の実践を発見した:1.プロセスが起動した後、このプロセスは機械村内を占有して徐々に増大して、例えば500 M、1 g、期間はYGCを行って、これに対して影響は大きくありません;
2020-xx-04T09:03:32.529+0800: 41.575: [GC (Allocation Failure) [PSYoungGen: 839680K->13428K(990720K)] 887823K->61580K(4136448K), 0.0052305 secs] [Times: user=0.08 sys=0.01, real=0.00 secs]
2020-xx-04T09:03:33.511+0800: 42.558: [GC (Allocation Failure) [PSYoungGen: 949364K->20549K(992256K)] 997516K->68709K(4137984K), 0.0057830 secs] [Times: user=0.09 sys=0.01, real=0.00 secs]

Youngゾーンは数百Mから数十Mに、総メモリも数百Mから数十Mに(表示される総メモリは4 g).2.olgゾーンが3 gに達すると、ゾーン全体の差が4 gも少なく、FullGCが行われ、このときoldゾーンが3 gから300 Mに、javaスタックメモリの使用が少なくなるが、このときtopは依然として最大値である.
2019-xx-28T16:10:50.867+0800: 181284.239: [GC (Allocation Failure) [PSYoungGen: 895638K->45114K(944128K)] 3998856K->3169775K(4089856K), 0.1031650 secs] [Times: user=0.79 sys=0.71, real=0.11 secs]
2019-xx-28T16:10:50.971+0800: 181284.342: [Full GC (Ergonomics) [PSYoungGen: 45114K->0K(944128K)] [ParOldGen: 3124661K->334930K(3145728K)] 3169775K->334930K(4089856K), [Metaspace: 44186K->44131K(1089536K)], 0.3835550 secs] [Times: user=4.06 sys=0.87, real=0.38 secs]
2019-xx-28T16:11:29.864+0800: 181323.236: [GC (Allocation Failure) [PSYoungGen: 839630K->16480K(944128K)] 1174560K->351410K(4089856K), 0.0547833 secs] [Times: user=0.11 sys=0.11, real=0.05 secs]

結論:javaが占有するlinuxメモリは徐々に大きくなり、FullGC後になるとjavaメモリは少なくなりますが、占有マシンは解放されません.