gpt4 book ai didi

java - 在 Linux 上测量进程的内存使用情况

转载 作者:IT王子 更新时间:2023-10-29 01:07:12 25 4
gpt4 key购买 nike

我正在尝试测量 Linux 上一个进程(一个 Java 程序)的内存使用情况,并且有两个与之相关的问题:

  1. 我尝试使用脚本 ps_mem.py (来自/proc/$PID/smaps 的总和值)总内存使用量的峰值约为 135MB(私有(private)和共享内存)。共享内存量小于 1MB。尝试将 Valgrind 与 massif 工具一起使用 valgrind --tool=massif --trace-children=yes --stacks=yes java myProgram 在内存使用高峰时产生大约 10MB。
    现在我的理解是,堆是我程序的变量存放的地方,是不是说这两种方法的区别在于代码本身(包括jvm)占用的空间?

  2. 如果同一程序具有不同的 RAM 量或/和使用不同的处理器(ARM 或 x86),那么它们在不同机器上使用的内存量是否不同?

最佳答案

  1. 视情况而定。
    • smaps 中的许多共享内存映射直接由磁盘上的库/二进制文件支持。虽然这些页面的占用空间确实很重要,但它并不那么重要,因为系统可以随时删除这些页面并在需要时从磁盘重新加载它们。
    • 任何脏的或私有(private)的东西都只属于当前进程(好吧,如果你的程序在没有 execs 的情况下进行 fork ,则为进程树)。这一点更为重要,因为如果需要将这些页面推出内存,系统必须将它们保存起来进行交换。
    • 测量的地 block 可能与后者相关。但是,JVM 本身(没有您的程序)占用的内存在两者中。
  2. 是的。 Java 或其使用的库可能会根据可用 RAM 的大小调整其内存模型。在不同的体系结构上,您使用的是完全不同的二进制文件,它们可能更大或更小,或者排列不同,或者使用不同的 JIT 和内存管理策略。

关于java - 在 Linux 上测量进程的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1890016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com