AIX进程内存分配与回收策略及应用开发建议.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
### AIX进程内存分配与回收策略及应用开发建议 #### 1. AIX内存分配回收策略 ##### 1.1 内存分配观察示例—递增分配 在AIX系统中,进程的内存分配可以通过`svmon`命令来进行观察。这种命令能够提供关于进程内存分配的具体细节,包括地址范围、已使用的内存页面数等信息。 - **示例**:假设有一个程序,它按照2MB、4MB、8MB、16MB这样的顺序逐步增加内存的分配量。 - **初始状态**:当首次分配2MB内存时,`svmon`显示的地址范围是从0到512页,即2MB的虚拟地址空间。此时的`Virtual`字段值为2,意味着这部分内存还未被实际分配。 - **初始化后**:执行`memset`等初始化操作后,`Virtual`字段的值变为513,表示2MB的虚拟地址空间已经被实际分配。 - **递增过程**:当释放先前分配的2MB内存,并分配4MB内存时,`svmon`会显示地址范围扩展到了0到1024页,即4MB的虚拟地址空间。这说明之前释放的2MB空间被重用。 - **继续递增**:接下来释放4MB内存,分配8MB内存,并初始化后,地址范围扩展到了0到2048页,即8MB的虚拟地址空间。同样地,之前的4MB被重用。 - **最终递增**:最后释放8MB内存,分配16MB内存并初始化后,地址范围扩展到了0到4096页,即16MB的虚拟地址空间。 这种递增分配方式展示了AIX系统如何高效地重用已被释放的内存空间。 ##### 1.2 内存分配观察示例—递减分配 递减分配是指程序按照从大到小的顺序逐步减少内存的分配量,例如从16MB、8MB、4MB、2MB这样的顺序逐步减少。 - **初始状态**:当首次分配16MB内存时,`svmon`显示的地址范围是从0到4096页,即16MB的虚拟地址空间。此时的`Virtual`字段值为2,意味着这部分内存还未被实际分配。 - **初始化后**:执行`memset`等初始化操作后,`Virtual`字段的值变为4097,表示16MB的虚拟地址空间已经被实际分配。 - **递减过程**:当释放先前分配的16MB内存,并分配8MB内存时,`svmon`显示的地址范围仍然为0到4096页。这是因为虽然释放了16MB的内存,但系统将其保留在进程自身的空间块树中,因此下一次8MB的分配实际上是直接从进程已有的16MB空闲块中获取的。 - **继续递减**:接下来释放8MB内存,分配4MB内存,并初始化后,地址范围仍然保持不变,因为同样的道理,4MB也是从之前的16MB空闲块中直接获取的。 - **最终递减**:最后释放4MB内存,分配2MB内存并初始化后,地址范围仍然保持不变。 这种递减分配方式展示了AIX系统如何有效地保留已释放的内存以供后续使用,即使这些内存并未被物理释放。 ##### 1.3 针对长运行程序的空闲内存回收 对于长时间运行的程序,即使程序在某个时间段内释放了大量的内存,这些内存也不会被系统立即回收。这会导致程序占用的私有内存大小等同于最高峰时期的内存大小。 - **解决方案**:为了解决这一问题,可以使用`mallopt`接口中的`M_DISCLAIM`选项来定期释放进程私有空间的free列表。例如,在程序的空闲时段,可以调用`mallopt(M_DISCLAIM, 0)`来释放进程私有的空闲内存。这样做可以有效减少进程内存的占用量,尤其是在业务高峰期大量内存申请导致私有free列表增长的情况下更为明显。 这种做法不仅可以提高内存的利用率,还能降低系统整体的内存压力,特别是在系统内存紧张的情况下,有助于提高系统性能和稳定性。 #### 2. 内存监控 除了内存分配和回收策略外,对AIX系统的内存使用情况进行监控也是非常重要的。 - **监控系统中内存占用最高的进程**:可以使用`svmon`命令配合`ps`命令来找出内存占用最高的进程。 - **寻找内存持续增长的进程**:通过定期观察`svmon`输出的变化,可以发现那些内存持续增长的进程。 - **通过共享内存ID对应关联到该共享内存的进程**:使用`ipcs -m`命令可以查看共享内存段的信息,并结合其他工具找到使用这些共享内存的进程。 - **获取AIXKernel的内存使用率**:通过`vmstat`或`sar`命令可以获取系统的内存使用情况。 - **判断系统是否存在内存不足**:可以观察`vmstat`中的`swap in`字段,如果频繁出现,则可能表明系统存在内存不足的情况。 #### 3. 应用开发工具 为了帮助开发者更好地管理和调试应用程序的内存使用情况,AIX提供了多种工具。 - **dbx使用以及coredump定位**:`dbx`是AIX系统中的一种调试器,可以帮助开发者定位程序崩溃的原因。通过设置core dump,可以在程序崩溃时生成内存快照,便于进一步分析。 - **内存非法使用检查**:使用`valgrind`等工具可以帮助检测程序中潜在的内存非法使用问题。 - **内存泄漏检查**:通过`report_allocations`等工具可以检查程序是否有内存泄漏的问题,并提供相应的报告。 - **proctools介绍**:`proctools`是一套用于进程管理和调试的工具集,包括`proc`、`procinfo`等命令。 - **probevue介绍**:`probevue`是一种基于图形界面的监控工具,可以帮助开发者实时监控程序的运行情况。 - **如何将C文件与汇编文件对应**:使用`gcc`编译器时,可以通过添加特定的选项来生成汇编代码,并与源代码进行对照,这对于理解程序的底层实现非常有帮助。 通过上述工具和技术的应用,开发者可以更加高效地管理程序的内存使用,提高程序的稳定性和性能。

































- 粉丝: 1w+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 微信小程序-从零开始Demo(1).zip
- 合同审查要点及质量标准.doc
- 畜禽产品监测项目和检测依据.docx
- 别墅项目销售前景分析.doc
- 韩语四级考试单词.docx
- 青海振动挤密碎石桩施工组织设计方案.doc
- 微信小程序反编译.zip
- 浙江省建设工程造价咨询服务基准收费标准.doc
- 第4篇第2章楼地层、屋盖及阳台、雨篷的基本构造.ppt
- 湖北水厂原水管道安装施工组织设计.doc
- 企业人事管理制度.doc
- 微信小程序:周公解梦境(1).zip
- Taro + Redux + 本地 Mock Server 微信小程序示例项目.zip
- 安装工程货物买卖合同.doc
- 关于地下车库采用机械停车系统造价分析.doc
- 污水处理菌种培植试运行方案.doc


