我正在 Solaris 10 系统上运行一个应用程序。
昨天我们将进程堆栈大小设置为无限制:
ulimit -s unlimited
今天,在加载期间,进程不会报告从 Oracle 数据库加载期间“内存不足”,当堆栈大小再次限制为 8192K 时,进程没有出现任何问题。
Stack Overflow 上有一个关于此的问题:运行具有“无限堆栈”大小的应用程序会产生什么影响?
但我们并没有看到人们所期望的奇怪且通常变化的内存相关问题。
所以有2个问题:
- 将 stack 设置为 Unlimited 是否有特定的含义,这将恢复到某些可能低于每个用户当前设置的 ulimit 的系统限制?
- 如果没有 root 访问权限,我在哪里可以找到这些限制?
编辑
`isainfo -v
64位sparcv9应用程序vis2 vis
32 位 sparc 应用程序 vis2 vis v8plus div32 mul32`
答案1
查看 pmap 输出的建议将引导您走向正确的方向。您可能需要考虑的一件事是内存碎片 - 如果您停止并启动数据库实例(以及依赖于它的应用程序),应用程序(rdbms 引擎)将进行多次系统调用以请求尽可能多的连续内存。当您的系统存在内存碎片时,需要大量内存的应用程序将难以启动,并且在这种情况下可能会报告 ENOMEM(内存不足)。
您可以使用 DTrace 亲自观察这一点。
Solaris 11、SRU 和更新中对此有一些修复,但我不确定它们是否适用于 Solaris 10。您应该登录到 MOS 并检查 rdbms 页面以了解 Solaris 10 特定的问题。