我正在研究大型多线程服务器的内存使用情况。根据mallinfo(),我得到了arena=350M
和fordblks=290M
,这表明大部分空间实际上浪费在了malloc()
内部。malloc_info()
函数提供了一个很好的XML数据结构,它应该是不言自明的。不过,有人能向我解释一下吗
- 堆
0
特别吗?这就是所有其他人居住的主舞台吗 <size from=.../>
区块是否已分配、空闲/可用- 什么是
<system>
元素?使用mmap()/sbrk()
分配的内存 - 什么是
<aspace>
元素?可用内存 <aspace type="mprotect" .../>
呢
首先,我希望能够根据malloc()
的想法绘制应用程序分配的总内存,即已分配和尚未释放的所有内存。
大量使用虚拟内存不一定是个问题。默认的malloc实现将为每个线程分配大量存储,以避免争用问题。这种情况尤其发生在如今非常常见的64位实现中。您不应该担心,除非您遇到驻留内存大小的问题或出现分页问题。
Kevin Grigorenko写了许多关于WebSphere内存使用的博客文章,但它们适用于任何大型多线程进程。