第十七章 进程内存

源码 2024-9-30 23:38:52 122 0 来自 中国
第十七章 进程内存

先容

进程利用许多差别的资源来实现其目的。此中包罗部分或全部 CPU 周期、内存、外部存储、网络带宽等。这篇文章是关于内存利用的。具体来说,它处置处罚为数据存储分配的内存,比方:

  • 公共和私有变量
当第一次为它们分配值时,它们被分配了内存空间。在局部数组的情况下,局部变量名称加上全部下标的值的组合引用单个变量值。
除了包罗极长字符串的变量外,变量会占用与 $STORAGE 干系的空间。包罗极长字符串的变量以差别方式存储,而且不占用 $STORAGE 中的空间。

  • 对象实例
每当实例化一个对象时,都会分配空间来生存对象的当前内容以及它所引用的对象。删除末了一个对象引用时返回该空间。

  • 本地 I/O 缓冲区
将与该进程正在利用的装备干系联的 I/O 缓冲区存储在进程空间中。
管理进程空间

进程从用于上述实体的初始内存池开始。当应用程序创建它们时,它们会斲丧池中的内存;当应用程序删除它们时,它们的内存将返回到池中。比方,当一个例程开始执行时,总是会创建斲丧一些内存的局部变量;当例程返回而且这些变量超出范围时,这些变量利用的内存将被返回并可供重用。
当应用程序必要内存,而且进程在其内存池中没有充足大(一连)的可用内存地域来满意需求时,该进程会从底层利用体系哀求额外的内存块以添加到其池中。稍后,假如该内存块完全未利用,它将返回给利用体系。由于为实体分配内存的次序和从内存中删除这些实体的次序不愿定是相互的镜像,因此随着执行的进行,内存在某种水平上会变得碎片化。这会影响上述利用体系的内存分配和开释。
$ZSTORAGE

进程最多可利用 2TB 内存。为了资助管理内存利用, 为管理员或应用程序提供了一种方法来设置较小的内存斲丧限定。该值存储在每个进程的体系变量 $ZSTORAGE 中,因此 $ZSTORAGE 始终包罗进程内存的最大允许巨细(以 KB 为单位)。
$ZSTORAGE 的值以 1KB 为单位指定。允许的最小值为 256,即 256KB。进程可以为 $ZSTORAGE 设置的最大值是 2TB (231 * 1KB) 内存。实验设置小于最小值或大于最大值的值将分别默以为最小值或最大值。
每个进程内存最大值

此值通过管理门户设置。要访问干系页面,请选择体系管理 > 设置  >体系设置  > 内存和启动。在出现的页面上,设置Maximum Per-Process Memory (KB) 中的值。
在设置文件 (iris.cpf) 中,此参数称为 bbsiz。此值是进程启动时 $ZSTORAGE 的初始值。
注意:也可以在通过 ObjectScript JOB 下令启动进程时设置进程的内存限定。
$STORAGE

体系变量 $STORAGE 表现仍在运行的进程可用的存储量。它以字节为单位。当进程对内存的哀求大于 $STORAGE 中的值或从利用体系分配内存的哀求失败时,它会天生 <STORE>错误。
<STORE> 错误

当满意进程的内存哀求会导致 $STORAGE 的值变为负数,大概利用体系分配内存的哀求失败时,它会天生 <STORE>错误。关于处置处罚 $STORAGE 变为负数的 <STORE> 错误, 进程可以被以为处于以下两种模式之一:正常模式和低内存模式。

  • 正常模式
当进程处于正常模式并哀求内存,否则会导致 $STORAGE 变为负数时,该进程会抛出 <STORE> 错误并进入低内存模式。

  • 低内存模式
在低内存模式下,允许利用将 $STORAGE 推为负数,以便为应用程序提供一些额外的内存来处置处罚错误和整理。当处于低内存模式的进程开释内存时,$STORAGE 的值至少上升到 256KB(或 $ZSTORAGE 的 25%,假如它更低),该进程将返回正常模式。在低内存模式下,$STORAGE 的下限约为 -1MB。否则会导致 $STORAGE 低于该限定的任何利用都会导致 <STORE> 错误。下限的值由进入低内存模式时的 $STORAGE 值界说,减去 1MB。
注意:进程可以将 $ZSTORAGE 设置为其允许范围内的任何值。假如 $ZSTORAGE 设置为小于当前利用的值,则 $STORAGE 将具有负值。假如在进程处于正常模式时发生这种情况,分配内存的下一个利用将导致进程得到  <STORE> 错误并进入低内存模式,下限便是该值减去 1MB。假如在进程已经处于低内存模式时发生这种情况,则下限保持稳固。
对于因超出 -1MB 低内存模式限定或未能从利用体系分配内存而导致的 <STORE>错误,由于可用内存太少,进程的运动是不可推测的。进<STORE>错误,大概错误处置处罚程序大概无法被调用而且进程大概会制止。
错误处置处罚程序可以利用以下一种或多种方法办理 <STORE> 错误:

  • 中断导致内存哀求的盘算,大概会开释盘算在发生 <STORE>错误之前得到的任何存储空间。
  • 实验通过删除不必要的数据来天生更多可用内存。
  • 执行任何须要的整理工作(比方关闭打开的文件),然后停止程序。
  • 将 $ZSTORAGE 的值设置为更大的值,以允许进程继续并在未来哀求更多内存。
特殊注意事项

平台

大多数实例在每个进程的可分配空间少于 2TB 的体系上运行。在此类体系上,当 进程耗尽可用体系内存(实际物理内存加上可用交换空间)时,底层体系大概会以多种方式处置处罚这种情况。一些例子是:

  • 在某些平台上,体系会发送一个信号,导 进程停止。
  • 在某些平台(比方 Linux 和 AIX)上,体系利用启发式算法来杀死它以为最具攻击性的进程。这大概是流程,但也大概是另一个选择的流程。
  • 一些体系通过产生使底层利用体系瓦解的内核“恐慌panic”来处置处罚内存耗尽。
  • 一些体系可以处置处罚内存耗尽的情况,但规复大概会导致进程中的访问辩说。
精良的编程实践表明进程不应依赖于底层平台利用的错误规复算法。相反,此类流程应提供充实的筹划、测试和日志纪录,以允许流程得本地估计和管理其自身的资源需求。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-2-6 06:01, Processed in 0.198204 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表