use*_*098 1 memory jvm memory-leaks kubernetes kubernetes-pod
我有一个在 k8s 上运行的 java 进程。
\n我设置Xms和Xmx来处理。
\njava -Xms512M -Xmx1G -XX:SurvivorRatio=8 -XX:NewRatio=6 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -jar automation.jar\nRun Code Online (Sandbox Code Playgroud)\n我的预期是 pod 应该消耗 1.5 或 2 GB 内存,但它消耗的内存更多,接近 3.5 GB。太多了。\n如果 \xc4\xb1 在虚拟机上运行我的进程,它消耗的内存要少得多。
\n当 \xc4\xb1 检查 pod 的内存统计信息时,\xc4\xb1 表示 pod 分配了过多的缓存内存。
\nRSS近1.5GB就可以了。因为Xmx是1gb。但为什么缓存近3GB。
\n有什么方法可以调整或控制这种用法吗?
\n/app $ cat /sys/fs/cgroup/memory/memory.stat\ncache 2881228800\nrss 1069154304\nrss_huge 446693376\nmapped_file 1060864\nswap 831488\npgpgin 1821674\npgpgout 966068\npgfault 467261\npgmajfault 47\ninactive_anon 532504576\nactive_anon 536588288\ninactive_file 426450944\nactive_file 2454777856\nunevictable 0\nhierarchical_memory_limit 16657932288\nhierarchical_memsw_limit 9223372036854771712\ntotal_cache 2881228800\ntotal_rss 1069154304\ntotal_rss_huge 446693376\ntotal_mapped_file 1060864\ntotal_swap 831488\ntotal_pgpgin 1821674\ntotal_pgpgout 966068\ntotal_pgfault 467261\ntotal_pgmajfault 47\ntotal_inactive_anon 532504576\ntotal_active_anon 536588288\ntotal_inactive_file 426450944\ntotal_active_file 2454777856\ntotal_unevictable 0\nRun Code Online (Sandbox Code Playgroud)\n
Java 进程可能会消耗比-Xmx我在这个答案中解释的指定更多的物理内存。
但是,在您的情况下,它甚至不是 Java 进程的内存,而是操作系统级别的页面缓存。通常,您不需要关心页面缓存,因为它是共享的可回收内存:当应用程序想要分配更多内存,但没有足够的立即可用空闲页面时,操作系统可能会释放部分页面缓存自动地。从这个意义上说,页面缓存不应被视为“已使用”内存 - 它更像是操作系统出于良好目的而使用的备用内存,而应用程序不需要它。
当应用程序执行大量文件 I/O 时,页面缓存通常会增长,这很好。
异步分析器可能有助于找到增长的确切来源:
运行它-e filemap:mm_filemap_add_to_page_cache
我在演讲中演示了这种方法。
| 归档时间: |
|
| 查看次数: |
8101 次 |
| 最近记录: |