【问题标题】:How to determine the process memory limit in Linux?如何确定Linux中的进程内存限制?
【发布时间】:2011-06-06 18:41:41
【问题描述】:

我一直在网上搜索,以了解 java 进程在 linux (red-hat) 机器上可以占用多少内存。 (我说的不是堆,而是java 进程占用的全部内存)

我无权在那台机器上执行任何操作。所以我不能简单地执行一个消耗内存的程序,直到出现内存不足的情况。

但是,我确实有权检查配置文件等(例如:我尝试执行 cat /proc/meminfo,但我无法理解它;它的结果似乎都不代表参数 I想知道)。

我已经在单独的红帽机器上试用了一个 java 程序——我确实有权在该机器上执行程序——我能够看到 java 程序增长到大约 3GB。

有什么方法可以找出一个进程可以获得多少内存?

【问题讨论】:

    标签: linux memory process out-of-memory


    【解决方案1】:

    ulimit 是你的朋友。 Java 进程与其他进程没有什么不同。但如果你连 ulimit -a 都不能运行,那你的问题就很难回答了。

    【讨论】:

    • 我执行了“ulimit -a”,但我得到的是输出有一堆选项可供尝试。所以我尝试了“ulimit -m”,得到的结果是“unimited”。我不知道这意味着什么,但我不认为这意味着一个进程可以占用无限的内存......是吗?
    • @rk2010 表示任何进程都没有内存使用配额,唯一的硬限制是计算机有多少 RAM 和交换内存。
    • @Matias 但互联网上似乎有很多信息(含糊不清)表明某个进程不能消耗超过 3GB 的内存。您对此有何看法?
    • @rk2010 这取决于操作系统是 64 位还是 32 位,对于 32 位操作系统,每个进程只能处理大约 3.5 GB 的内存。无论如何,如果你有更多的内存,“需要”一个 64 位操作系统。
    • 32 位进程可以拥有的总内存是无限的(机器上所有存储的大小(硬盘、内存等)挖掘其他地方使用的内存。但可以映射的最大值(作为直接可寻址内存访问)在任何时候都是4GB-(2次方n),n通常是30,给4GB-1GB=3GB。29的n会给你3.5GB。我不记得如何改变n。
    【解决方案2】:

    这里有一个有用的读物​​:Limiting time and memory consumption of a program in Linux,这导致了timeout 工具,它可以让您根据时间或内存消耗来限制进程(以及它的分叉)。

    【讨论】:

      【解决方案3】:

      我一直在处理这个确切的问题,如果您使用 2.6.24 或更高版本,我发现最好的解决方案是使用 cgroup / cgroups。一个例子是这样的,这是默认的 /etc/cgconfig.conf 文件,在底部添加了一个控制组。此控制组将物理内存的数量限制为 100MB,将总虚拟内存分配限制为 200MB。

      mount {
          cpuset  = /cgroup/cpuset;
          cpu = /cgroup/cpu;
          cpuacct = /cgroup/cpuacct;
          memory  = /cgroup/memory;
          devices = /cgroup/devices;
          freezer = /cgroup/freezer;
          net_cls = /cgroup/net_cls;
          blkio   = /cgroup/blkio;
      }
      
      group daemons/java_limited_process {
          memory {
              memory.limit_in_bytes = "104857600";
              memory.memsw.limit_in_bytes = "209715200";
          }
      }
      

      配置完成后,我可以像这样将进程添加到组中

      cgexec -g memory:daemons/java_limited_process /usr/local/tomcat/bin/startup.sh
      

      这将限制主进程及其产生的任何子进程的内存。它还具有查询控制器中内存使用情况的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多