Java Increase Heap size - java

I have a java application form which i am accessing records from database,processing it and again updaing the database.
I am doing this by converting my java application to JAR and executing it from command prompt.During testing there are only 20 records
per table in database.For that i am executing the jar as follows to avoid out of memory error,
java -jar -Xmx512m MyApp.jar
If database contains much record(50,000),how to increase the heap size while executing jar or How to increase the heap size dynamically based on needs while executing the jar.
Thanks

The maximal heap size is set before running the program by using the -Xmx option you already used. Based on this information, the JVM will use as much heap size as it needs, up to the given amount. So if your program only needs 1 MB of RAM, the JVM will only use that amount, if it needs 1G and you only gave it 512M, you will get an OutOfMemoryError.
So, basically, you can give your program more heap space if you need to, and the JVM will dynamically adjust the used heap size according to its needs.
Sometimes this is not the intended behavior, and the lower bound for heap size can be set with -Xms. Then the JVM will always reserve a heap of the size between Xms and Xmx.

The maximum is the maximum heap you would need ever not how much it will actually use. It's the point at which you would rather than application crash than keep running. The JVM will dynamically manage the memory used up to this point.
How to increase the heap size dynamically based on needs while executing the jar.
So if you want the JVM to use 256 MB, but you want it to dynamically grow up to 30 GB you would set it like this
java -ms256m -mx30g -jar MyApp.jar
Even the minimum is not guaranteed to be used. The JVM will do minimal effort to keep the memory usage up to this level. A Hello World program will not use 256 MB of heap no matter what you set the minimum to.

-Xmx2048m -XX:-UseGCOverheadLimit
Set this in your VM Arguement.
You can set less memory size in place of 2048

This will increase your max heapSize to 1Gb.
java -Xms256m -Xmx1024m -jar MyApp.jar
where -Xms specifies the initial Java heap size and -Xmx the maximum Java heap size.
Parameters to the JVM must be passed before the -jar part. The reason for that can be seen when we execute "java -version" :
Usage:
java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)

Related

I am getting JMeter Out of Memory error even after I already upgraded my RAM from 8G to 16G

Can someone please help me with the Out of Memory (OOM) error that I encountered while running JMeter
I am a newbie in Java and in JMeter, and also in performance testing. I used the command prompt but I am still encountering Out of Memory issue. I tried to adjust the heap size but running did not continue every time I change it.
My current heap size is below
set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m
I added another memory: from 8GB, my memory is now 16GB.
But when I run it again with 1000 threads, the error below is shown:
Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread in thread Thread[Thread Group 1-130,5,main]. See the log file for details.
Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread in thread Thread[Thread Group 1-63,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread in thread Thread[Thread Group 1-135,5,main]. See log file for details.
Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread in thread Thread[Thread Group 1-19,5,main]. See log file for details.
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate
Sometimes I am also encountering just this error:
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate
Can someone please help me. I am just a beginner so I would appreciate if you will reply with terms that are not too technical.
Thank you in advance.
The error you're getting indicates that underlying operating system is not able to create a new native thread / process.
Try increasing limits for the operating system, i.e. if you're on Linux you can check the maximum number of threads using ulimit -n command
In any case you can decrease the stack size via -Xss JVM argument
Unfortunately in its current shape your question doesn't provide enough information in order to come up with a comprehensive answer, if above hints don't help consider adding more details like:
Operating system version and architecture
JMeter version
Java version and archivecture
At least first 20 lines of the .HPROF file
Also make sure to follow recommendations from the 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure article
the flag Xmx indicates the maximum memory for the JVM. You should increase your xmx value to something more appropriate for your usage.
try:
set HEAP=-Xms1g -Xmx4g -XX:MaxMetaspaceSize=256m
change Heap size in jmeter.sh file if you are using Linux/ubuntu, Jmeter.bat in windows. Increase the -Xmx1g =to half of the memory of the system i.e., 4gb(-Xmx4g). also try to increase the user load from 500 and check the CPU and RAM utilization in Task Manager of Windows.
I have faced the out of memory issue on trying to run 10k vusers in 8GB RAM. Later on increased the instance memory as 16GB and 10k vusers load ran successfully.
Increase JVM memory as 12 GB in /etc/profile/
Increase JMeter Heap as 10GB in "jmeter" file(Linux OS). ('set HEAP' option is available in "jmeter.bat" file for Windows server)
3.Open files limit - 65535
maximum user process limit - 65535
Open the command window as root user
Execute following commands and update values to change the default limit
vim /etc/security/limits.conf
root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535
vim /etc/sysctl.conf
fs.file-max = 65535
sysctl -p
reboot
After rebooting, the changes will be affected in the machine and kindly cross verify that.
Should run the JMeter script in Non-GUI as a root user only.
Note: Delete dump heap file in "bin" if any.

Java.lang.OutOfMemoryError: Java heap space [Ubuntu]

i am trying to run my code and i got this error on my console
[java] Caused by: java.lang.OutOfMemoryError: Java heap space
i run Jconsole on jdk folder the max heap 1.9m ,how can i change it ?
As for hybris, you need to update tomcat.generaloptions property to adjust Xmx value. For instance, via local.properties.
-Xmx2G is a default value.
tomcat.generaloptions=-Xmx4G -ea -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dorg.tanukisoftware.wrapper.WrapperManager.mbean=true -Djava.endorsed.dirs="%CATALINA_HOME%/lib/endorsed" -Dcatalina.base=%CATALINA_BASE% -Dcatalina.home=%CATALINA_HOME% -Dfile.encoding=UTF-8 -Djava.util.logging.config.file=jdk_logging.properties -Djava.io.tmpdir="${HYBRIS_TEMP_DIR}"
You can configure the max heap size using the -Xmx size command line argument.
By default it's 64mb. The 1.9m you see seems strange.
Here is the Oracle doc for the java command:
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html
Specifically:
-Xmxsize
Specifies the maximum size (in bytes) of the memory allocation pool in bytes. This value must be a multiple of 1024 and greater than 2 MB. Append the letter k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. The default value is chosen at runtime based on system configuration. For server deployments, -Xms and -Xmx are often set to the same value. See the section "Ergonomics" in Java SE HotSpot Virtual Machine Garbage Collection Tuning Guide at http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html.
The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
-Xmx83886080
-Xmx81920k
-Xmx80m
The -Xmx option is equivalent to -XX:MaxHeapSize.

Increased heap size in java is not reflecting in jconsole

strong text
I am trying to run an java spring boot application by specifying the heap size as argument while starting the jar like below,
java -jar a-1.0.0.jar -Dpidfile=/tmp/a_report.pid -Xmx5196m -Xms512m
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/java_heapdump.hprof
Max Heap Space - 4 GB
But when I try to monitor the application after execution in J-Console, I could not see the actual heap size change getting reflected. I could see in Memory tab the following params
Time:  2018-02-13 15:23:42 Used: 
    73,103 kbytes Committed:   1,181,184 kbytes Max:   1,864,192 kbytes
Also the application throws OOM exception when the heap size is around 2 gb so it is clear that the updated heap space memory given during the start of the application is not getting reflected.
So what should I do to make my application pick heap space as 4gb
Configuration :
RAM - 8 gb JDK - 1.8
You need to provide the options before -jar a-1.0.0.jar, otherwise they're interpreted as arguments for the jar, not for the JVM.

how to extend Java Virtual Memory in CentOS?

as I wrote on the title, I want to extend Virtual Memory while performing my java code.
currently, I'm writing a code for word Analyzer. In eclipse if there are 1000 number of inputs then it gives 1000 fine outputs. however when I run it from a server, it gives 80% outputs and 20% for null. after that I asked this problem to someone I know and he said it is because of small size of Virtual Memory in the server.
I normally run the java program with .sh file and content of the .sh file is written as below.
export JAVA_HOME="usr/lib/jvm/java-1.6.0-openjdk.x86_64"
PATH=$PATH:JAVA_HOME/jre/bin
export JAVA_HOME
java -cp /home/account/count_con.jar countConversation.countCon_Starter &
and then type "bash .sh file".
Please give me your kind advice for how to run java code with extra Virtual memory size in server(OS:CentOS).
Thank you
after java command set the flag -Xmxsizem
FYI
Xms is initial Java heap size
Xmx is maximum Java heap size
Xss is java thread stack size

Read pdf using java

i have a problem with reading PDF file content in java using itextpdf.jar ,
if i read a small sized(5-15MB) PDF file means its working well, it is possible to read it's contents
but when i read large sized(200MB) PDF file means its showing Run time exception like following
enter code hereException in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at com.itextpdf.text.pdf.RandomAccessFileOrArray.InputStreamToArray(RandomAccessFileOrArray.java:213)
at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:203)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:235)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:246)
at general.FileStreamClose.main(FileStreamClose.java:28)
Java Result: 1enter code here
any solution for this , how to increase heap size in tomcat
You can tune your Java Application Runtime settings:
maximize heap size to high value with -Xmx say 500M
tune -XX:MaxHeapFreeRatio and -XX:MinHeapFreeRatio to make sure that the application will not becomes irresponsive when consuming lot of memory when the heap reduces.
to increase heap size for tomcat you'll have to set the evnirenment variable JAVA_OPTS and have it contain the -Xmx option for example -Xmx512m
here is a sample script how you can run tomcat
#echo off
set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_33
set CATALINA_HOME=C:\Program Files\apache-tomcat-7.0
set JAVA_OPTS=-XX:MaxPermSize=128m -Xmx512m -server
call %CATALINA_HOME%\bin\catalina.bat run
for additional info, as far as i know, if your machine is 32 bit increase xmx and xms heap size will limited around 1k++. If you need more than that you need to install java 64 bit (of course in 64 machine and 64 OS).

Categories

Resources