当前位置:网站首页>进程内存
进程内存
2022-08-03 11:12:00 【用户7741497】
介绍
进程使用许多不同的资源来实现其目标。其中包括部分或全部 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”来处理内存耗尽。 - 一些系统可以处理内存耗尽的情况,但恢复可能会导致进程中的访问冲突。
良好的编程实践表明进程不应依赖于底层平台使用的错误恢复算法。相反,此类流程应提供充分的设计、测试和日志记录,以允许流程适当地估计和管理其自身的资源需求。
边栏推荐
- 【AppCube】数字孪生万物可视 | 联接现实世界与数字空间
- Question G: Word Analysis ← Questions for the second provincial competition of the 11th Blue Bridge Cup Competition
- What is a smart contract?
- 记某社区问答
- 【网络原理的概念】
- 「全球数字经济大会」登陆 N 世界,融云提供通信云服务支持
- BPMN和DMN基本概念和使用案例
- Simple implementation of a high-performance clone of Redis using .NET (1)
- 【一起学Rust】Rust的Hello Rust详细解析
- JS快速高效开发技巧指南(持续更新)
猜你喜欢

性能优化|从ping延时看CPU电源管理

Dry goods!A highly structured and sparse linear transformation called Deformable Butterfly (DeBut)

干货!一种被称为Deformable Butterfly(DeBut)的高度结构化且稀疏的线性变换

如何检索IDC研究报告?

成为优秀架构师必备技能:怎样才能画出让所有人赞不绝口的系统架构图?秘诀是什么?快来打开这篇文章看看吧!...

What is the relationship between The Matrix and 6G?

Summary of redis basics - data types (strings, lists, sets, hashes, sets)

CADEditorX ActiveX 14.1.X

【冒泡排序以及奇数偶数排列】

二叉搜索树(搜索二叉树)模拟实现(有递归版本)
随机推荐
Objective - C code analysis of the deep and shallow copy
【多线程的相关内容】
Lease recovery system based on PHP7.2+MySQL5.7
程序员架构修炼之道:软件架构基本概念和思维
Activiti产生的背景和作用
【JDBC以及内部类的讲解】
劝退背后。
Why is the new earth blurred, in-depth analysis of white balls, viewing pictures, and downloading problems
微信多开批处理(自动获取安装路径)
【TypeScript】为什么要选择 TypeScript?
CDH6.3.2开启kerberos认证
LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二
【LeetCode—第2题 两数之和 代码详解 】附有源码,可直接复制
记住用户名案例(js)
国内数字藏品与国外NFT主要有以下六大方面的区别
Cookie和Session使用
【网络原理的概念】
LeetCode——1161. 最大层内元素和
MATLAB programming and application 2.7 Structural data and unit data
智能合约是什么?