当前位置:网站首页>第十七章 进程内存
第十七章 进程内存
2022-07-04 12:52:00 【yaoxin521123】
第十七章 进程内存
介绍
进程使用许多不同的资源来实现其目标。其中包括部分或全部 CPU 周期、内存、外部存储、网络带宽等。这篇文章是关于内存使用的。具体来说,它处理为数据存储分配的内存,例如:
- 公共和私有变量
当第一次为它们分配值时,它们被分配了内存空间。在局部数组的情况下,局部变量名称加上所有下标的值的组合引用单个变量值。
除了包含极长字符串的变量外,变量会占用与 $STORAGE
相关的空间。包含极长字符串的变量以不同方式存储,并且不占用 $STORAGE
中的空间。
- 对象实例
每当实例化一个对象时,都会分配空间来保存对象的当前内容以及它所引用的对象。删除最后一个对象引用时返回该空间。
- 本地
I/O
缓冲区
将与该进程正在使用的设备相关联的 I/O
缓冲区存储在进程空间中。
管理进程空间
进程从用于上述实体的初始内存池开始。当应用程序创建它们时,它们会消耗池中的内存;当应用程序删除它们时,它们的内存将返回到池中。例如,当一个例程开始执行时,总是会创建消耗一些内存的局部变量;当例程返回并且这些变量超出范围时,这些变量使用的内存将被返回并可供重用。
当应用程序需要内存,并且进程在其内存池中没有足够大(连续)的可用内存区域来满足需求时,该进程会从底层操作系统请求额外的内存块以添加到其池中。稍后,如果该内存块完全未使用,它将返回给操作系统。由于为实体分配内存的顺序和从内存中删除这些实体的顺序不一定是彼此的镜像,因此随着执行的进行,内存在某种程度上会变得碎片化。这会影响上述操作系统的内存分配和释放。
$ZSTORAGE
进程最多可使用 2TB
内存。为了帮助管理内存使用, 为管理员或应用程序提供了一种方法来设置较小的内存消耗限制。该值存储在每个进程的系统变量 $ZSTORAGE
中,因此 $ZSTORAGE
始终包含进程内存的最大允许大小(以 KB
为单位)。
$ZSTORAGE
的值以 1KB
为单位指定。允许的最小值为 256
,即 256KB
。进程可以为 $ZSTORAGE
设置的最大值是 2TB (2^31 * 1KB)
内存。尝试设置小于最小值或大于最大值的值将分别默认为最小值或最大值。
每个进程内存最大值
此值通过管理门户设置。要访问相关页面,请选择系统管理 > 配置 >系统配置 > 内存和启动。在出现的页面上,设置Maximum Per-Process Memory (KB)
中的值。
在配置文件 (iris.cpf
) 中,此参数称为 bbsiz
。此值是进程启动时 $ZSTORAGE
的初始值。
注意:也可以在通过 ObjectScript JOB
命令启动进程时设置进程的内存限制。
$STORAGE
系统变量 $STORAGE
表示仍在运行的进程可用的存储量。它以字节为单位。当进程对内存的请求大于 $STORAGE
中的值或从操作系统分配内存的请求失败时,它会生成 <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
”来处理内存耗尽。 - 一些系统可以处理内存耗尽的情况,但恢复可能会导致进程中的访问冲突。
良好的编程实践表明进程不应依赖于底层平台使用的错误恢复算法。相反,此类流程应提供充分的设计、测试和日志记录,以允许流程适当地估计和管理其自身的资源需求。
边栏推荐
- xshell/bash/zsh 等终端鼠标滚轮乱码问题(转)
- Unittest框架之断言
- IP 实验室月复盘 · 第 5 期
- 测试流程整理(2)
- R language uses dplyr package group_ The by function and the summarize function calculate the mean and standard deviation of the target variables based on the grouped variables
- Remove duplicate letters [greedy + monotonic stack (maintain monotonic sequence with array +len)]
- 2022 practice questions and mock exams for the main principals of hazardous chemical business units
- LifeCycle
- Assertion of unittest framework
- Unittest框架中引入TestFixture
猜你喜欢
C # WPF realizes the real-time screen capture function of screen capture box
Understand chisel language thoroughly 11. Chisel project construction, operation and test (III) -- scalatest of chisel test
基于YOLOv1的口罩佩戴检测
MySQL 5 installation and modification free
【信息检索】链接分析
MySQL version 8 installation Free Tutorial
吃透Chisel语言.06.Chisel基础(三)——寄存器和计数器
nowcoder重排链表
[antd step pit] antd form cooperates with input Form The height occupied by item is incorrect
Vscode common plug-ins summary
随机推荐
docker-compose公网部署redis哨兵模式
Unittest中的TestSuite和TestRunner
MySQL之详解索引
Introducing testfixture into unittest framework
Understand chisel language thoroughly 04. Chisel Foundation (I) - signal type and constant
R语言ggplot2可视化:gganimate包创建动态折线图动画(gif)、使用transition_reveal函数在动画中沿给定维度逐步显示数据
[matlab] summary of conv, filter, conv2, Filter2 and imfilter convolution functions
R language uses dplyr package group_ The by function and the summarize function calculate the mean and standard deviation of the target variables based on the grouped variables
Unittest框架之断言
Apple 5g chip research and development failure: continue to rely on Qualcomm, but also worry about being prosecuted?
基于PaddleX的智能零售柜商品识别
golang fmt. Printf() (turn)
Remove duplicate letters [greedy + monotonic stack (maintain monotonic sequence with array +len)]
Understand chisel language thoroughly 06. Chisel Foundation (III) -- registers and counters
CVPR 2022 | greatly reduce the manual annotation required for zero sample learning, and propose category semantic embedding rich in visual information (source code download)
Golang uses JSON unmarshal number to interface{} number to become float64 type (turn)
Can mortgage with housing exclude compulsory execution
Test process arrangement (2)
Ruichengxin micro sprint technology innovation board: annual revenue of 367million, proposed to raise 1.3 billion, Datang Telecom is a shareholder
IP lab monthly resumption · issue 5