【问题标题】:How can I obtain memory usage information using zos assembler如何使用 zos 汇编程序获取内存使用信息
【发布时间】:2017-11-29 18:58:09
【问题描述】:

如何以编程方式从正在运行的程序中获取汇编程序当前正在使用汇编指令/宏的内存量?我正在调试一个 878(内存不足)错误,我希望我的程序在不同阶段报告它正在使用多少内存。

【问题讨论】:

  • 这取决于您运行的操作系统并涉及调用操作系统 API。
  • 我正在运行 zos v1.3
  • 真实的还是虚拟的?
  • 哇,z/OS 1.3:支持结束 2005-03-31...
  • 我弄错了,它实际上是 2.1 版。确定虚拟内存量就可以了。我正在尝试调试 878 异常终止。我确信还有其他方法可以做到这一点,但这是我有兴趣学习的方法(如果可能的话)

标签: assembly memory zos mvs


【解决方案1】:

可以根据地址空间的类型(TSO 会话、批处理作业、STC 等)以多种不同的方式设置区域大小。一些站点使用 SMF 出口设置自定义区域大小,因此并不总是很容易理解这里发生的事情。

给定地址空间的限制值存储在 LDA 数据区域中(请参阅https://www-304.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R3ga320937/$file/iead300_v2r3.pdf)。在汇编程序中,您可以通过遵循 PSAAOLD 到 ASCBLDA 然后检查您正在寻找的任何区域大小来获得此值。

z/OS 上的各种 UNIX 服务 API 提供了一个更现代的接口。例如,getrusage (BPX1GRU) 为您提供多种资源的资源利用率,包括内存。使用这些东西的汇编程序所需要的只是安全信息中的一个 UNIX UID 值——不需要其他特殊设置。

【讨论】:

  • 我知道我的区域限制大小是多少,我在 JCL EXEC 语句中使用 REGION=XX 参数指定它。我对允许的最大内存不感兴趣,但对正在运行的程序在其执行期间的任何给定时间点当前分配的内存量不感兴趣。
  • 瓦莱丽的回答是正确的。 LDA 包含当前使用情况而不仅仅是限制。 LDALOAL 是 16MB 线以下的当前私有区域使用量,LDAELOAL 是 16MB 线以上的使用量。
  • BPX1GRU 似乎只返回时间,而不是内存使用情况,除非我遗漏了什么?
  • @FierceMonkey:小小警告:仅仅因为您在 JCL 中设置了 REGION 并不意味着您真正知道您的区域大小 - 有几种方法可以覆盖区域大小,具体取决于您的站点的复杂程度。
  • @David Crayford:您对“股票”BPX1GRU 的看法是正确的......不过有一种方法 - 如果您真的需要知道,我建议打开 SYSOMVS 跟踪并运行“ ps" 命令与 -vsz 选项 - 你肯定会在跟踪输出中找到你的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多