我所说的进程树是指进程及其以任何方式执行的所有内容。
我尝试过/usr/bin/time -v,但结果完全错误。例如,npm test在我们的一个项目中运行 14GiB 可用 RAM 和 8GiB 可用交换会导致 OOM 杀手开始杀死我的应用程序(最常见的是浏览器和 IDE)。time报告仅使用了 800MiB,尽管实际内存消耗一定非常高,超过 20GiB...
首先,我将使用smem. 例如,您可以用来smem -tas uss进行概述。
-t...显示总计-a...自动调整列宽-s uss...根据uss列对结果进行排序要查看每个进程的详细信息,最好的方法是使用pmap. 要获取详细信息,您应该使用-Xswitch。要获取内核提供的所有信息,您可以使用-XX这通常是一种矫枉过正。
要获得pid 3120的 2 秒刷新监控:
watch -n 2 pmap -X 3120
编辑:实际获得峰值 上面有助于监控,但它不显示实际峰值。我忘了。
我个人会使用valgrind该massif工具。
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=evolution_massif.out evolution; grep mem_heap_B evolution_massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
解释:
--page-as-heap=yes...告诉 Massif 它应该占用所有内存而不仅仅是堆--massif-out-file... Massif工具的输出文件下一部分是找出记录的最大数量。
搜索mem_heap_Bgrep出现的地方。去掉字符串,这样我们就只能得到数字结果。我们通过通用数字排序对其进行排序,并取最大的数字,返回排序数字的第一行。sed -emem_heap_Bsort -gtail -n 1
应用程序终止后valgrid会打印出一个数字,即内存峰值(以[B]ytes为单位)。
要显示输出文件evolution_massif.out,您可以使用ms_printMassif的后处理工具。
很简单:
ms_print evolution_massif.out
输出应如下所示(这是输出的第一页),您可以在其中看到哪个快照是峰值 - 10(峰值):
--------------------------------------------------------------------------------
Command: evolution
Massif arguments: --pages-as-heap=yes --massif-out-file=massif.out
ms_print arguments: massif.out
--------------------------------------------------------------------------------
GB
10.09^ #
| #
| #
| #
| #
| #
| # @:::::@::::::::::::::::@@:::::@:::::@::::::@::::@:::::@::
| # @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::::@:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| @ #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
| :::@::#::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
0 +----------------------------------------------------------------------->Gi
0 8.927
Number of snapshots: 97
Detailed snapshots: [7, 10 (peak), 17, 24, 43, 44, 50, 60, 70, 80, 90]
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 16,384 16,384 0 0
1 149,772,704 393,547,776 393,547,776 0 0
2 243,902,287 398,592,800 398,592,800 0 0
3 396,613,298 558,157,704 558,157,704 0 0
4 504,752,503 638,138,760 638,138,760 0 0
5 604,812,936 639,894,808 639,894,808 0 0
...
Run Code Online (Sandbox Code Playgroud)
编辑以添加所有子项:
要添加所有后代(子级),您可以将该--trace-children=yes选项添加到命令中valgrind。
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |