我如何堆栈存储器编程的统计信息?(How do I get stack memory stats p

2019-10-29 17:31发布

我正在写一个简单的内存报告工具(使用现有的工具,在这种特殊情况下不是一个选项)。 我知道了打印最大,提交和使用,通过迭代返回的所有内存池ManagementFactory.getMemoryPoolMXBeans() 这让我堆内存(伊甸园,幸存者老),PermGen的,而“代码缓存”的三个堆代。

这些都不似乎是方法堆栈存储器。 最接近的事似乎是“代码缓存”,但我读过,这实际上是在hotspotter放编译的类。

我问,因为我想追查一个JBoss Web应用程序多数民众赞成未能创建一个新的线程崩溃的原因。 http://www.mastertheboss.com/jboss-server/jboss-monitoring/how-to-solve-javalangoutofmemoryerror-unable-to-create-new-native-thread表明,这可能是由于耗尽堆栈内存,这按理说。 现在的问题是:如何获取栈内存,所以我可以检查?

Answer 1:

在Linux上,你可以解析/proc/self/maps (或/proc/self/smaps有详细介绍)。
寻找与结束线[stack:NNN]和计算的堆栈大小为top - bottom

7f8a5c0e1000-7f8a5c1df000 rw-p 00000000 00:00 0    [stack:2669]
^ bottom     ^ top                                        ^ tid

在Windows中,这将是困难的,但你可以通过估计作为堆栈使用的内存
number_of_threads * default_stack_size



文章来源: How do I get stack memory stats programatically?