2

I am running an application on a Solaris 10 system.

Yesterday we have set the process stack size to unlimited:

ulimit -s unlimited

Today during the load the process would not come up reporting that it is "out of memory" during loading from Oracle database when the stack size was limited again to 8192K the process came up with no issues.

There was a question regarding this on Stack Overflow: What is the effect of running an application with "Unlimited Stack" size?

But we're not seeing the odd and usually varying memory related issues that one would expect.

So there are 2 questions:

  1. Is there a specific implication of setting stack to Unlimited that would revert to some system limits that might be lower then the current ulimit set per user?
  2. Where could I find what those limits might be without having root access?

EDIT

`isainfo -v

64-bit sparcv9 applications vis2 vis

32-bit sparc applications vis2 vis v8plus div32 mul32`

  • The process may be allocating memory differently internally due to the stack not being limited to 8192K. Did the crash produce a core file to analyse? Are you on a 32 bit host? (isainfo -v) – Matt Jun 3 '14 at 13:38
  • @mtm No core was produced (no comment). isainfo output added but this is a 32-bit application running on a 64bit host. – Karlson Jun 3 '14 at 13:45
  • A bit less likely on 64bit but assuming Oracle is using a large chunk of the 4GiB? If you can pmap the process before it crashes and see where and how much stack is allocated. It might be that oracle doesn't have enough contiguous free memory left in the 32bit space to allocate the rest of it's data. 32bit Java suffers from a similar foible in large memory setups where it tries to allocate all memory in one anon chunk and any fragmentation stops that from happening. If the stack has moved to some large boundary due to no ulimit (worst case, 2GB) Oracle can't use as much memory. – Matt Jun 3 '14 at 14:08
  • Well, Oracle "might not be able to use as much memory"... assuming it's like most databases and likes to gobble up all it's memory in one chunk. – Matt Jun 3 '14 at 14:12
  • @mtm Oracle Server is not running on the same machine I just have a client. – Karlson Jun 3 '14 at 14:54
2

The suggestion to look at pmap output is leading you in the right direction. One thing that you might want to consider is memory fragmentation - if you are stopping and starting your db instance (and apps depending on it), the application (rdbms engine) will be making several system calls to request as much contiguous memory as possible. When your system has memory fragmentation then applications which are memory-hungry will find it difficult to start up and may report ENOMEM (out of memory) in this case.

You can watch this for yourself by using DTrace.

There are some fixes for this in Solaris 11, SRUs and Updates, but I'm not sure if they're available for Solaris 10. You should log in to MOS and check the rdbms pages for Solaris 10-specific issues.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.