当前位置:网站首页>第十七章 进程内存
第十七章 进程内存
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”来处理内存耗尽。 - 一些系统可以处理内存耗尽的情况,但恢复可能会导致进程中的访问冲突。
良好的编程实践表明进程不应依赖于底层平台使用的错误恢复算法。相反,此类流程应提供充分的设计、测试和日志记录,以允许流程适当地估计和管理其自身的资源需求。
边栏推荐
- 卷积神经网络经典论文集合(深度学习分类篇)
- nowcoder重排链表
- R语言使用epiDisplay包的followup.plot函数可视化多个ID(病例)监测指标的纵向随访图、使用stress.col参数指定强调线的id子集的颜色(色彩)
- Gorm data insertion (transfer)
- Deming Lee listed on Shenzhen Stock Exchange: the market value is 3.1 billion, which is the husband and wife of Li Hu and Tian Hua
- 去除重复字母[贪心+单调栈(用数组+len来维持单调序列)]
- C# wpf 实现截屏框实时截屏功能
- Leetcode 61: 旋转链表
- Learning projects are self-made, and growth opportunities are self created
- QT how to detect whether the mouse is on a control
猜你喜欢

2022 practice questions and mock exams for the main principals of hazardous chemical business units

1200. Minimum absolute difference

Innovation and development of independent industrial software

Unittest中的TestSuite和TestRunner

sql优化之查询优化器

Use of tiledlayout function in MATLAB
![Supprimer les lettres dupliquées [avidité + pile monotone (maintenir la séquence monotone avec un tableau + Len)]](/img/af/a1dcba6f45eb4ccc668cd04a662e9c.png)
Supprimer les lettres dupliquées [avidité + pile monotone (maintenir la séquence monotone avec un tableau + Len)]

【FAQ】華為帳號服務報錯 907135701的常見原因總結和解决方法

吃透Chisel语言.05.Chisel基础(二)——组合电路与运算符

Understand chisel language thoroughly 11. Chisel project construction, operation and test (III) -- scalatest of chisel test
随机推荐
吃透Chisel语言.10.Chisel项目构建、运行和测试(二)——Chisel中生成Verilog代码&Chisel开发流程
做事的真正意义和目的,真正想得到什么
gin集成支付宝支付
Learn kernel 3: use GDB to track the kernel call chain
Understand chisel language thoroughly 07. Chisel Foundation (IV) - bundle and VEC
go vendor 项目迁移到 mod 项目
mac redis安装与使用,连接远程服务器 redis
Golang uses JSON unmarshal number to interface{} number to become float64 type (turn)
Oppo find N2 product form first exposure: supplement all short boards
R语言dplyr包summarise_if函数计算dataframe数据中所有数值数据列的均值和中位数、基于条件进行数据汇总分析(Summarize all Numeric Variables)
Leetcode 61: 旋转链表
Learning projects are self-made, and growth opportunities are self created
[R language data science]: cross validation and looking back
nowcoder重排链表
LiveData
数据仓库面试问题准备
吃透Chisel语言.08.Chisel基础(五)——Wire、Reg和IO,以及如何理解Chisel生成硬件
R语言使用epiDisplay包的followup.plot函数可视化多个ID(病例)监测指标的纵向随访图、使用stress.col参数指定强调线的id子集的颜色(色彩)
docker-compose公网部署redis哨兵模式
Hardware Basics - diode Basics