Heap vs. Stack
why is memory allocation for newely created objects the slowest kind of memory allocation in java?
if, for example, I call a Method containning a single local variable of type int, a stack frame will be allocated with an array of length 1 containing that local variable(and an operand stack + constant pool reference, but that's beside the point). why is this memory allocation faster than creating a new instance of the class Integer? is the stack essentially smaller than the heap(that's for sure), thus being placed in main memory, to which OS runtime has faster access?
I alwayas took this kind of for granted, but when I came to think about it I couldn't find a clear explanation...
Agreed, but the context you're sketching here is a kindergarten context, even with as little as --The purpose of the small example was just to show one situation where you obviously were wrong. No, you've got you're reasoning skills upside down. In reply #6 you wrote --
If an object is local to a method it can as well live on the stack during the excecution of the
method as variables do.And I simply showed that this is not necessarily true; only later you came up with the kindergarten
context, but that still doesn't prove me wrong for the general case you mentioned in you reply #6.
There clearly are cases where optimizations of this kind are possible. Agreed, as I wrote before.
Did you check the link I provided.I've read it before you mentioned it, thank you.
Aggressive optimizations like these will be available in future JIT's regardless of whether you consider
them possible or not.As I said, in such a kindergarten context, optimizer can do what you described, but even in a simple
case like this -- void m() {
Object o= new ...;
if (somePredicateThatHasNothingToDoWhithO())
o= new SomethingElse();
} The compile (whether JIT or not) stands with its back against the wall, because no fixed space can be
allocated on any stack anymore to accomodate to different (sized?) objects. You're talking about a
kindergarten context which you didn't mention in your first statement, so you are the one who's
logically wrong here; sorry, I can't make it look better than it is.
kind regards,
Jos
Similar Messages
-
How to find Heap and stack space
How to find the heap sapce and stack space allocated at the moment.
My requirement, I need to test our application by changing both of these, and atfter finish testing and have to set them to old values.You may consider reading up on how the Java stores data. There is no malloc() in java. I don't believe there is anyway within java that you can check the heap and stack size. And you can't allocate memory directly in java anyway so you wouldn't be able to change the value if you did get it. I would suggest using C or C++ to do this. Of course you can use JNI to call a C/C++ method from your java class but you will still have to first write the method in C/C++ which will make it platform specific anyway, so again I would suggest writeing this in another language which provides methods with direct access to the stack.
-
Dear;
I have a bit confusion in memory Heap and Stack.
I have a class:
class A {
String A;
static String B;
void methodOne() {
String C;
}Now on initialization, I know the static variable B will goto Heap, C will goto Stack
But where will A goes to Heap or Stack ?muhammadowais wrote:
Dear;
I have a bit confusion in memory Heap and Stack.
I have a class:
class MyClass {
String A;
static String B;
void methodOne() {
String C;
Now on initialization, I know the static variable B will goto Heap, C will goto Stack
But where will A goes to Heap or Stack ?Let's be more precise. (I renamed the class in the above to make the discusion easier.)
A is a reference variable.
B is a reference variable.
C is a reference variable.
Notice in the above that NONE of the variables point to anything.
A is a member of MyClass. It doesn't exist if an instance of MyClass doesn't exist. The instance of MyClass goes on the heap, thus indirectly A goes there.
B is a member of the "class" instance of MyClass. One of those exists when you load MyClass. The instance of the "class" of MyClass goes on the heap, thus indirectly B goes on the heap.
C is a local variable and thus becomes a stack reference. (If you wish to quibble since it isn't used it is possible that either the compiler or the hotspot compiler could remove it completly thus it would not exist at all.)
Again note that the above pertains to the variables and not what those variables reference. -
Hi I am new to Java Tecnology .If Someone can help me with this thing .
Where is the Array will be stored during memory allocation .In the Heap or Stack .
What will Happen If the Arrsy is for example ,of int type .
Any Answer will be appericiated .
THANKSBut since Array is under util package why dont we have
to import it while using it .You don't have to import a class to use it. The reason for importing is so that you can refer to a class without using the package name. If you fully qualify all classes, you never have to import at all!
Is it has to do something to heap or stack Again No, importing or packages have absolutely nothing to do with what's on the stack or heap. Objects are always in the heap, and local variables are always on the stack. -
hi chums,
For a long time,I am having one doubt in employing local/instance/static variable.
For instance variable[Object variable],theoretically,as we known,these are on the heap while executing an application.
For local variable,these are on the stack at run time.
Specifically,I would like to know what criteria the following things would be.Whether it runs on heap or stack.
instance variables/methods-primitives=> ?
static variables/methods-object => ?
static variable/method-primitives => ?
local variable-object => ?
Please anyone clarify me?
With Regards,
Stalin.GWhy the second post, without so much as acknowledging the responses on [your earlier thread|http://forum.java.sun.com/thread.jspa?threadID=5294010|brainless twit]?
db -
Large JVM heap sizes under windows xp?
I have a windows XP Pro SP1 box with 2 GB of physical RAM. I am using the latest jdk, 1.4.2_05.
I understand that 32 bit windows by default allows 2 GB address space for each application, permanently reserving 2 GB for the OS. (There are also apparently special builds going back to win2k which have a special mode where applications can address 3 GB and the OS addresses 1 GB; if anyone knows how to turn this mode on under win xp please let me know.)
So, I should be able to allocate ~2 GB to the JVM (the number is slightly less than 2 GB due to overhead associated with each process in windows) using something like
-Xms1900m -Xmx1900m
as command line args to the java command.
But when I try the above it crashes with the error
Error occurred during initialization of VM
Could not reserve enough space for object heap
Experimentally, I found that the maximum value which works on my box is
-Xms1200m -Xmx1200m
which seems way smaller than it ought to be.
Doing a forum search, I found others who report similar issues, e.g.
http://forum.java.sun.com/thread.jsp?forum=136&thread=522506
But I did not find a decent solution or up to date discusssion.
Does anyone know with windows xp pro what the jvm memory limit is?
As part of my sun search, I came across the following old (circa 2000) but interesting bug report:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4358809
I have never heard of the rebase program before. Is it built into windows? Is it safe to use? Anyone ever try the command as described there?In addition to this forum posting, I got in email communication with Peter Kessler, the technical lead for the garbage collector in the HotSpot(TM) virtual machine). Below are snippets from some of his emails to me.
#1:
I haven't tried pushing Windohs XP to see how big I could get the
heap. I'm pretty sure you don't want to get try to get it to 1.9GB,
since that wouldn't leave much room for DLL's, JVM data structures
outside the heap, thread stacks, I/O buffers, etc.
I don't know what the library C:\WINDOWS\System32\LPK.DLL is, or if
you could successfully rebase it closer to 0x76000000. The issue
with rebasing DLL's is that people have sometimes given thought to
where they should be, given other libraries they are typically used
with. (If a DLL can't be loaded at its default base address, it
gets relocated dynamically. That slows down program startup; and
often means that the library can't be shared with other applications
running on the same machine, increasing your need for swap file
space.)
It does seem weird that we would make the default base for jvm.dll
be 0x08000000, but the base of hpi.dll at 0x10000000. [See email #3 below]
The jvm.dll isn't going to get that much larger any time soon. I'll ask around
about that one. (The library bases for JDK-1.4.2 are different
from those reported in bug id 4358809 for because we periodically
reconsider where to base the libraries, given the other libraries
on a particular release of Windohs.)
So, I don't have any great advice on how to squeeze another 400MB of
heap out of your machine. I suppose it's fruitless to ask if you
could squeeze 400MB of data structures out of your application?
Have you run an allocation profiler on it?
Since you are willing to switch operating systems, you can download
a copy of Solaris 10 for x86 platforms (for free) from
http://wwws.sun.com/software/solaris/10/
I just tried a Solaris 10 x86 box, and could get a -Xmx2900m jvm to
start. But without your application it's hard to know if it would
run well with that size heap (e.g., if it would have room for thread
stacks, file buffers, etc.), so your milage may vary, but 2.9GB is
larger than you say you need. There are lots of other benefits of
running Solaris. I don't know about making you a poster child, but
I could ask about that, too.
#2:
I'm told that some of the popular distibutions of Linux ship with
a "4GB" kernel, which allows one to get 3GB (2.4 kernels?) or almost
4GB (2.6 kernels?) of address space for user processes. I haven't
used those kernels myself. Among the reasons the 4GB kernel isn't
the standard kernel is that some user programs are surprised (in a
bad way) by finding their code or data in the "negative" part of
the address space, or crossing the "sign-bit" boundary. (Of course,
all addressing arithmetic should be done as unsigned quantities!)
Our Java virtual machine shouldn't have those problems, so that
kernel might work for you.
#3:
Ah. It looks like in JDK-1.4.2 (and earlier) we forgot to
explicitly set the base for hpi.dll, so it got the default
base of 0x10000000. (Don't we love learning these details
about Windohs?) As I said, we periodically reconsider the
bases for the libraries. We seem to have done that, more
thoroughly, for JDK-1.5.0:
Base Size Version Path
0x00400000 0xc000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\bin\java.EXE
0x77f80000 0x7d000 5.00.2195.6899 C:\WINNT\system32\ntdll.dll
0x7c2d0000 0x62000 5.00.2195.6876 C:\WINNT\system32\ADVAPI32.dll
0x7c570000 0xb8000 5.00.2195.6897 C:\WINNT\system32\KERNEL32.DLL
0x77d30000 0x71000 5.00.2195.6904 C:\WINNT\system32\RPCRT4.DLL
0x78000000 0x45000 6.01.9844.0000 C:\WINNT\system32\MSVCRT.dll
0x6d6b0000 0x185000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\client\jvm.dll
0x77e10000 0x65000 5.00.2195.6897 C:\WINNT\system32\USER32.dll
0x77f40000 0x3e000 5.00.2195.6898 C:\WINNT\system32\GDI32.DLL
0x77570000 0x30000 5.00.2161.0001 C:\WINNT\system32\WINMM.dll
0x6d2f0000 0x8000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\hpi.dll
0x690a0000 0xb000 5.00.2134.0001 C:\WINNT\system32\PSAPI.DLL
0x6d680000 0xc000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\verify.dll
0x6d370000 0x1d000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\java.dll
0x6d6a0000 0xf000 1.05.0000.0000 C:\pbk\deployed\JDK-1.5.0\jre\bin\zip.dll
You might want to try the "release candidate" (i.e., what we
hope will be the final bits) of JDK-1.5.0 from
http://java.sun.com/j2se/1.5.0/download.jsp
and see if it helps. -
Stack size for native thread attaching to JVM
All:
I have a native thread (see below, FailoverCallbackThread) that attaches to the JVM and does a Java call through JNI. The stack size for the native thread is 256KB.
at psiUserStackBangNow+112()@0x20000000007a96d0
at psiGuessUserStackBounds+320()@0x20000000007a8940
at psiGuessStackBounds+48()@0x20000000007a8f60
at psiGetPlatformStackInfo+336()@0x20000000007a9110
at psiGetStackInfo+160()@0x20000000007a8b40
at psSetupStackInfo+48()@0x20000000007a5e00
at vmtiAttachToVMThread+208()@0x20000000007c88b0
at tsAttachCurrentThread+896()@0x20000000007ca500
at attachThread+304()@0x2000000000751940
at genericACFConnectionCallback+400(JdbcOdbc.c:4624)@0x104b1bc10
at FailoverCallbackThread+512(vocctx.cpp:688)@0x104b8ddc0
at start_thread+352()@0x20000000001457f0
at __clone2+208()@0x200000000030b9f0
This causes stack overflow in Oracle JRockit JVM. (It does not cause overflow with Oracle Sun JDK.) Is there a recommended stack size for this use case for JRockit? Is there a way to compute it roughly?
Platform Itanium 64 (linux)]
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
BEA JRockit(R) (build R26.4.0-63-63688-1.5.0_06-20060626-2259-linux-ia64, )
mpHow do I found default heap size, stack size for the
thread, number of threads per jvm/process supported ?The threads is OS, OS install and jvm version specific. That information is also not useful. If you create the maximum number of threads that your application can create you will run out of memory. Threads require memory. And it is unlikely to run very well either.
The default heap size and stack size are documented in the javadocs that explain the tools that come with the sun jdk.
and how the above things will vary for each OS and how
do I found ? Threads vary by OS, and OS install. The others do not (at least not with the sun jvm.)
If I get "OutOfMemoryError: Unable to create new native thread" Most of the time it indicates a design problem in your code. At the very lease, you should consider using a thread pool instead.
I found in one forum, in linux you can create maximum
of 894 threads. Is it true ?Seems high since in linux each thread is a new process, but it could be. -
JVM 1.4 default stack size
Hi,
I would like to know what is the default stack size of JVM of jdk 1.4.
Is there any command which i can use to find the current stack size set up?
Is the heap size & stack size same?
Actually i'm getting a java.lang.StackOverflowError when i execute a class ProgramCallDocument which is present in the jt400.jar provided by IBM in thier Websphere Application Studio Server suite.
The class is working fine with jdk 1.3. But it is giving an error in jdk 1.4
Do any one have any clue about this? Please Help.
Thanks,
Jac.Thanks for the reply...
Actaully I was looking for how to know the current stack size set for JVM. I assume that using -Xss command will increase the stack size, but before doing so I need to take the current stack size.
Please let me know if you know the command for getting the current stack size set for JVM.
Thanks,
Jacob. -
when I make this
int [] x = new int[5] ;
in where prosecute in heap or stack memoryjcgra2 wrote:
when I make this
int [] x = new int[5] ;
in where prosecute in heap or stack memoryIt depends: is it defining an instance variable or is it in a method?
The general rule is: all objects and their instance variables are allocated on the heap; method variables are allocated on the stack. Here you have 7 items:
the array (int[5]) --- In Java, arrays are objects, so it will be allocated on the heap.
the array contents (x[0] - x[4]) --- this is considered part of the array, so will be on the heap.
x --- the variable that references the array. This is where the difference comes: If it is being defined in a method, then x will be allocated on the stack; if it is an instance variable, it will be on the heap.
HIH
Winston -
Oracle 8.1.5 to oracle8.1.6 upgradation
Hi
I am working paralelly on both Solaris2.7 and win NT4.0
The details are as follows
1. Liscenced versions of Oracle8.1.5 have been installed on both the systems
In order to upgrade I tried searching for the script u0801050.sql in both the systems under ORACLE_HOME/rdbms/admin, but it was not available
I solved this as follows on Win NT:
1. Installed oracle8.1.6 on NT in the same HOME .
2. The script was present in after this re-install.
3. I used the script(Should I have done this?)
But there is a problem with Java Upgradation now.
I started the database in the RESTRICT mode
And here is the output from the Log file
SVRMGR> @jvmu815.sql
SVRMGR> -- Upgrade an 8.1.5 database to 8.1.6 for running Java and the ORB
SVRMGR>
SVRMGR> -- Support packages, including rmjvm were loaded during main upgrade
SVRMGR>
SVRMGR> -- Load all the Java classes
SVRMGR> create or replace java system;
2> /
create or replace java system;
ORA-04030: out of process memory when trying to allocate 554648 bytes (joxcx callheap,ioc_allocate ufree)
ORA-00604: error occurred at recursive SQL level 1
ORA-04030: out of process memory when trying to allocate 8512 bytes (pga heap,ksm stack)
SVRMGR>
SVRMGR> -- Java Sanity check for installation
SVRMGR> -- If the following query returns 0, then the Java installation
SVRMGR> -- did not suceed
Any solutions or input ?
Thanks in advance
nandeep
[email protected])
nullapplets can only use jdbc thin drivers.
-
Had this error msg in my application log:
Had this error msg in my application log:
[21/Feb/2002 10:16:20:7] info: REQ-012: thread add
[21/Feb/2002 10:16:20:7] info: REQ-012: thread add
[21/Feb/2002 10:16:20:7] info: ENGINE-ready: ready: 10820
BASEURL: https://ssunp03.company.com:8081
strURL: https://ssunp03.company.com:8081/cgi-bin/gx.cgi/AppLogic+EventServerManager
EventServerHttpInvocation > java.net.MalformedURLException: unknown protocol: https
**Out of memory, exiting**
ld.so.1: /pimcreg5/imc/nas/40sp3/nas/usr/java/bin/sparc/native_threads/jre: fatal: /pimcreg5/imc/nas/40sp3/nas/us
r/java/lib/sparc/native_threads/libjava.so: mprotect failed: Resource temporarily unavailable
Killed
Connected to LDAP server on ssunp03.company.com port 1390
[21/Feb/2002 02:42:49:1] info: ENGINE-class_loader_created: New class loader com.kivasoft.engine.EngineClassLoade
rNonVersionable@1c14d67f has just been created
Can anyone share with me his experience about ld.so.1?? What is it and why does it cause my apps server to reboot?It looks like you might simply have run out of memory. It just looks like the JRE tried to adjust its memory map and run out space. When mprotect fails the problem probably isn't with the .so itself.
What are the memory characteristics of your machine? Including the heap and stack space that you allocate for your JVM, as well as the actual physical and swap space available on the server. -
ORA-00604: error occurred at recursive SQL level 2
Hello,
I am trying to create a simple table and I am getting a ora error as below.
SQL> create table album(name varchar2(100),image blob);
create table album(name varchar2(100),image blob)
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 2
ORA-01422: exact fetch returns more than requested number of rows
how to resolve this?Any help..
Thanks,
Ranz.Hi,
*@Anurag Tibrewal,*
I followed as per the order od statements you gave. Initially there was no table "ALBUM" when I executed the first 2 statements.
3rd staement i created a table "ALBUM" and then 4th and 5th statement showed that I have a table called "ALBUM".
Now when again I wanted to drop the table I am getting the same error.
SQL> drop table album
2 ;
drop table album
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01422: exact fetch returns more than requested number of rows
*@Jean-Valentin*
I am not finding the trace file for today as i checked the alert log. When i searched for the the error I found the error for March 4. No ora-00604 error from today.
As shown in ALERT LOG.
Thu Mar 04 10:50:41 2010
Errors in file d:\oracle\product\10.2.0\admin\raneeshtest\bdump\*raneeshtest_j000_5976.trc*:
ORA-00604: error occurred at recursive SQL level 1
ORA-04030: out of process memory when trying to allocate 172 bytes (Typecheck,seg:kggfaAllocSeg)
ORA-12012: error on auto execute of job 1
ORA-04030: out of process memory when trying to allocate 16428 bytes (pga heap,kgh stack)
Trace file details:
Dump file d:\oracle\product\10.2.0\admin\raneeshtest\bdump\raneeshtest_j000_5976.trc
Thu Mar 04 10:50:31 2010
ORACLE V10.2.0.3.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Personal Oracle Database 10g Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
Windows NT Version V6.0 Service Pack 1
CPU : 2 - type 586, 2 Physical Cores
Process Affinity : 0x00000000
Memory (Avail/Total): Ph:27M/2037M, Ph+PgF:341M/4352M, VA:4M/2047M
Instance name: raneeshtest
Redo thread mounted by this instance: 1
Oracle process number: 15
Windows thread id: 5976, image: ORACLE.EXE (J000)
*** 2010-03-04 10:50:31.224
*** ACTION NAME:() 2010-03-04 10:50:30.276
*** MODULE NAME:() 2010-03-04 10:50:30.195
*** SERVICE NAME:(SYS$USERS) 2010-03-04 10:50:30.195
*** SESSION ID:(137.401) 2010-03-04 10:50:30.195
*********START PLSQL RUNTIME DUMP************
***Got internal error Exception caught in pfrrun() while running PLSQL***
***Got ORA-4030 while running PLSQL***
PACKAGE SYSMAN.MGMT_ADMIN_DATA:
library unit=3416af50 line=128 opcode=117 static link=0 scope=0
FP=3ca31374 PC=30f42000 Page=0 AP=3ca47b2c ST=3ca32778
DL0=3ca46564 GF=3ca465b0 DL1=3ca46584 DPF=3ca465a8 DS=30f421e4
DON library unit variable list instantiation
0 3416af50 3ca465b0 3ca2005c
1
2
3
4
5
6
7
scope frame
2 0
1 3ca31374
package variable address size
0 3ca46698 16
1 3ca466a8 16
2 3ca466b8 16
3 3ca466c8 16
4 3ca466d8 16
5 3ca466e8 20
6 3ca466fc 16
7 3ca4670c 20
8 3ca46720 16
9 3ca46730 4
10 3ca46734 4
11 3ca46738 4
12 3ca4673c 4
13 3ca46740 4
14 3ca46744 4
15 3ca46748 4
16 3ca4674c 4
17 3ca46750 4
18 3ca46754 4
19 3ca46758 4
20 3ca4675c 4
21 3ca46760 20
22 3ca46774 20
23 3ca46788 20
24 3ca4679c 20
25 3ca467b0 4
26 3ca467b4 4
27 3ca467b8 4
28 3ca467bc 4
29 3ca467c0 16
30 3ca467d0 16
31 3ca467e0 8
32 3ca467e8 39
33 3ca46810 39
34 3ca46838 521
35 3ca46a44 521
36 3ca46c50 140
37 3ca46cdc 140
38 3ca46d68 30
39 3ca46d88 30
40 3ca46da8 30
41 3ca46dc8 30
42 3ca46de8 30
43 3ca46e08 30
44 3ca46e28 30
45 3ca46e48 30
46 3ca46e68 30
47 3ca46e88 30
48 3ca46ea8 30
49 3ca46ec8 30
50 3ca46ee8 140
51 3ca46f74 140
52 3ca47000 30
53 3ca47020 30
54 3ca47040 30
55 3ca47060 30
56 3ca47080 39
57 3ca470a8 39
version=43123476 instantiation size=2920
line pcode offset
1 2
4 620
5 632
6 632
7 638
8 644
14 650
29 810
44 970
47 992
48 1000
49 1008
50 1016
51 1024
52 1032
53 1040
54 1048
55 1056
56 1064
57 1072
60 1080
128 1814
196 2548
197 2554
198 2560
199 2566
205 2572
206 2578
438 2584
1 2586
***********END PLSQL RUNTIME DUMP************
*** 2010-03-04 10:50:40.690
ORA-12012: error on auto execute of job 1
ORA-04030: out of process memory when trying to allocate 16428 bytes (pga heap,kgh stack)
*** 2010-03-04 10:50:41.206
ORA-00604: error occurred at recursive SQL level 1
ORA-04030: out of process memory when trying to allocate 172 bytes (Typecheck,seg:kggfaAllocSeg)
ORA-12012: error on auto execute of job 1
ORA-04030: out of process memory when trying to allocate 16428 bytes (pga heap,kgh stack)
SQL> select * from dual;
D
X
SQL>
This is the output. Its returning corredclty. Now what is the problem? Pls help me. -
Performance problem submitting big XML string parameter to the web service
We deployed a web service on the OC4J via oracle.j2ee.ws.StatelessJavaRpcWebService . This web service takes one string as a parameter. The string contains XML. Evrything works great UNLESS input XML string reaches 5Mb in size. When it happens OC4J does something with it for about 10 minutes (yes, minutes) before it calls the web service method. At this time java.exe consumes 100% of CPU.
WE tried to increase JVM heap size, stack size, etc, - no effect.
Please, help!
Thank you in advance,
Vlad.Hi Sheldon,
What i feel is that it's not been handled in your webservice if the parameter is null or "" <blank> space
i just you to take care in webservice that if the parameter is null or "" pass the parameter null to the stored proc
Regards
Pavan -
How do I increase the thread limit on Linux?
OS: Linux (or Sun Linux)
Kernel: 2.4.9-31enterprise
Memory: 2GB
CPUs: 2
Java: 1.4.1_01
I have a dual processor Cobalt LX50 and I am running
into a thread limit with Java. No matter what I do
with the Java JVM parameters (heap and stack), I
cannot get any more than 949 threads. My "top" and "vmstat" output
shows that I am no where near my memory capacity.
Below is a simple Java program (28 lines long) I have
used to test this limit. My question is simply how do
I go about increasing this limit. Is there some kernel
parameter I can set or maybe have to recompile into
the kernel? My /proc/sys/kernel/threads-max is 16383.
I do not believe my ulimit settings are the problem,
but I will post them anyway. The problem also occurs
on non-Cobalt (plain old PCs) uniprocessor machines
maxxing at about 1018 threads. The other interesting thing is that when I run the same program through the Kaffe VM with -Xms64M and -Xmx512M I do not run into the thread limit problem. Does anyone know what I need to change to get my thread limit up? Also, rewriting the way the program uses threads is not an option.
[root]# ulimit -a core file size (blocks) 0
data seg size (kbytes) unlimited
file size (blocks) unlimited
max locked memory (kbytes) unlimited
max memory size (kbytes) unlimited
open files 1024
pipe size (512 bytes) 8
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 8191
virtual memory (kbytes) unlimited
/*******************************Sample java program
testing thread
limits***********************************************/
import java.util.Timer;
import java.util.TimerTask;
public class Reminder {
Timer timer;
static int cnt;
public Reminder(int seconds) {
timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000);
class RemindTask extends TimerTask {
public void run() {
System.out.println("Time's up!");
timer.cancel(); //Terminate the timer thread
public static void main(String args[]) {
System.out.println("About to schedule task.");
cnt = 0;
while (true) {
new Reminder(90);
System.out.println("Thread #" + ++cnt + "
scheduled.");Confer also:
http://forum.java.sun.com/thread.jsp?forum=37&thread=358276 -
Query on Linux 'top' command in Linux for oracle user
This is the output of 'top' command in one of my linux server hosting One Oracle instance with 600MB SGA and 400MB PGA. One one instance is up in this server.
top - 14:36:37 up 4:26, 3 users, load average: 0.05, 0.11, 0.28
Tasks: 124 total, 1 running, 123 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2% us, 0.1% sy, 0.0% ni, 66.6% id, 33.1% wa, 0.0% hi, 0.0% si
Mem: 12299332k total, *2569836k* used, 9729496k free, 61288k buffers
Swap: 20972816k total, 0k used, 20972816k free, 2274852k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6345 oracle 16 0 37132 1752 1172 S 0.0 0.0 0:00.08 sshd
6346 oracle 16 0 54004 1536 1208 S 0.0 0.0 0:00.02 bash
6423 oracle 16 0 45376 10m 6228 S 0.0 0.1 0:00.25 tnslsnr
6471 oracle 16 0 740m 17m 13m S 0.0 0.1 0:00.02 oracle
6473 oracle 16 0 739m 15m 12m S 0.0 0.1 0:00.01 oracle
6475 oracle 16 0 739m 32m 29m S 0.0 0.3 0:00.07 oracle
6477 oracle 16 0 742m 50m 44m S 0.0 0.4 0:00.27 oracle
6479 oracle 16 0 754m 23m 19m S 0.0 0.2 0:00.43 oracle
6481 oracle 16 0 739m 24m 20m S 0.0 0.2 0:00.61 oracle
6483 oracle 16 0 740m 88m 83m S 0.0 0.7 0:00.71 oracle
6485 oracle 16 0 739m 22m 19m S 0.0 0.2 0:00.01 oracle
6487 oracle 16 0 740m 30m 25m S 0.0 0.3 0:00.15 oracle
6489 oracle 16 0 741m 55m 48m S 0.0 0.5 0:00.29 oracle
6491 oracle 16 0 739m 24m 20m S 0.0 0.2 0:00.01 oracle
6493 oracle 16 0 739m 15m 11m S 0.0 0.1 0:00.01 oracle
6495 oracle 16 0 739m 14m 11m S 0.0 0.1 0:00.00 oracle
6622 oracle 16 0 739m 16m 13m S 0.0 0.1 0:00.00 oracle
6626 oracle 16 0 740m 79m 74m S 0.0 0.7 0:01.95 oracle
6636 oracle 16 0 740m 28m 23m S 0.0 0.2 0:00.06 oracle
6638 oracle 16 0 739m 16m 12m S 0.0 0.1 0:00.01 oracle
6846 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.02 oracle
6848 oracle 16 0 739m 24m 21m S 0.0 0.2 0:00.04 oracle
6850 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.02 oracle
6852 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.01 oracle
6854 oracle 16 0 739m 30m 26m S 0.0 0.3 0:00.12 oracle
6856 oracle 15 0 739m 28m 24m S 0.0 0.2 0:00.18 oracle
6858 oracle 15 0 740m 40m 35m S 0.0 0.3 0:06.39 oracle
6862 oracle 16 0 739m 32m 28m S 0.0 0.3 0:02.25 oracle
6864 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.02 oracle
6866 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.03 oracle
6868 oracle 16 0 739m 19m 16m S 0.0 0.2 0:00.02 oracle
7480 oracle 15 0 37264 1668 1092 S 0.0 0.0 0:00.15 sshd
7481 oracle 15 0 54004 1528 1196 S 0.0 0.0 0:00.05 bash
10333 oracle 16 0 739m 20m 16m S 0.0 0.2 0:00.00 oracle
10337 oracle 15 0 6168 1080 768 R 0.0 0.0 0:00.00 top
Total RAM as seen from top command is 12G.
*2569836* - Total RAM which is being used currently .
How can I see the total RAM used by all Oracle Processes running in this server. The server is Linux X86 64 Bit. Can I sum up the values under 'VIRT' column of 'top' command to see the total RAM used ?
Is there a way to see the total RAM and CPU used by Oracle from top ?
'VIRT' is the virtual memory - In what way is this related to the figure above, which is the physical memory (RAM) ?
Thanks in Advance
SSN
Edited by: SSNair on Oct 21, 2010 2:39 AMOracle used shared memory to implement the SGA, which constituted the largest memory consumption of the Oracle instance. The problem is that in many modern OS, including linux, it is hard to define the actual memory usage fo a software. This is because the memory used by a process is actually composed of shared (e.g., shared memory, shared library, executable code) and private (e.g., the heap, the stack) components. Utilities like top, ps, etc reports all memory visible by a process, disregarding whether it is shared or not. As a result, the total of VIRT etc will be inflated by the shared components. For a more accurate figure of memory usage, shared memory / library / code should be counted once.
Before 11g, Oracle used System V ipc, and the amount of memory allocated can be checked using ipcs. In 11g, Oracle switched to /dev/shm, use df to check the memory allocation. (Thanks user11150436)
The "Mem used" figure in top is the actual usage of the memory: shared memory and library are not multi-counted. However, Linux will always cache (read before actually requested) and buffer (write after signalling completion) disk I/O. Therefore, "Mem used" is almost always very close to the amount of physical memory. "Mem used" - "buffers" - "cached" reflects the memory actually used by the OS and all programs more accuately.
And you can use the pmap utility to check the memory map. Then you classify the sharable and unsharable memory usage to calculate a more accurate result suiting your need. You need OS knowledge to understand the output. -
Error ORA-04030: out of process memory when trying to allocate 8512 bytes
Good Afternoon estimated
I want to see if anyone has the following problem occurred while there are about 70 concurrent connections to the Oracle instance. if anyone has any solution.
is grateful for the help in advance:
Dump file d:\oracle\data\admin\ppmdb\bdump\ppmdb_mmon_5032.trc
Thu Aug 11 09:23:40 2011
ORACLE V10.2.0.4.0 - Production vsnsta=0
vsnsql=14 vsnxtr=3
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the OLAP, Data Mining and Real Application Testing options
Windows NT Version V5.2 Service Pack 2
CPU : 8 - type 586, 1 Physical Cores
Process Affinity : 0x00000000
Memory (Avail/Total): Ph:5642M/8181M, Ph+PgF:17775M/20246M, VA:9M/2047M
Instance name: DBMM
Redo thread mounted by this instance: 1
Oracle process number: 11
Windows thread id: 5032, image: ORACLE.EXE (MMON)
*** 2011-08-11 09:23:40.429
*** SERVICE NAME:(SYS$BACKGROUND) 2011-08-11 09:23:40.413
*** SESSION ID:(161.1) 2011-08-11 09:23:40.413
*** KEWROCISTMTEXEC - encountered error: (ORA-04030: out of process memory when trying to allocate 8512 bytes (pga heap,kgh stack)
*** SQLSTR: total-len=267, dump-len=240,
STR={insert into wrh$_sysmetric_history (snap_id, dbid, instance_number, begin_time, end_time, intsize, group_id, metric_id, value) select :snap_id, :dbid, :instance_number, begtime, endtime, intsize_csec, groupid, metri}
===============
Note: This allows us to continue to connect more users and the only way to make new connections is restarting the instance
I Have Configurate: pga_aggregate_target integer 379584512
Total System Global Area 1577058304 bytes
Fixed Size 1299216 bytes
Variable Size 729812208 bytes
Database Buffers 838860800 bytes
Redo Buffers 7086080 bytes
Thank you for your possible help
Claudio T.804135 wrote:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
Windows NT Version V5.2 Service Pack 2
Memory (Avail/Total): Ph:5642M/8181M, Ph+PgF:17775M/20246M, VA:9M/2047M
I Have Configurate: pga_aggregate_target integer 379584512
Total System Global Area 1577058304 bytesHave a search on this forum (or google) for the error code, there should be lots of previous discussion on this one.
From no sign of 64-bit in the product banner plus VA (address space) 2 GB (close enough), it looks like the server is running as 32-bit process.
With SGA + PGA (target) adding up to nearly 1900 MB, my guess is you are hitting the 2 GB per process limit.
Lower SGA, it should help in the very short term. For longer term: lower resource demands or start planning for migration to 64-bit.
Maybe you are looking for
-
In the R/3 window we get a Menu Option System -> List -> Save -> Local File. And the same appear for Transaction iViews (SAP GUI for Windows) In cases of SAP GUI for HTML or for that matter any ITS URL for a transaction, where can we find an option t
-
Is there any way to bypass the xlate table. We have no requirement for NAT on our FWSM however every time a change is made we must clear the xlate table. I have tried using NAT exemption however entries still appear in the xlate table. Any ideas?
-
PLEASE, IS THERE A EASILY METHOD TO CONVERT A 5 DIGIT NUMBER IN SECOND TO THE FORMAT HH:MM (HOUR AND MINUTE) THANKS
-
Programmat​ically set the default of a control
Hi, I am working on an application where in one part of the program the user can apply a waveform, then in a different subvi is this waveform is applied/not applied the default value of a certain control will be either digital trigger or no trigger.
-
CS3 - Getting Multiple Error Messages Related to Javascript/Spry/XSLT
In the last couple of days, I have been getting endless error messages from DW CS3. Messages like: Javascript error while executing onLoad in PageManager. Spry.htm has configuration that is invalid. XSLT.htm has configuration that is invalid. Also, m