Servoy is built using Java technology and as such the memory management for Servoy is basically Java Memory management. This chapter describes the basics of Java Memory management, which will be sufficient for all but the most extensive and complex deployment scenario's.
Stoc |
---|
...
The basics of Java Memory management is straight forward:
...
The two most important spaces of memory that a Java process uses are the Java Heap Space and the Java Perm Space.
The Heap Space is the main space used by Java while operating. As such this space will use the most memory. The settings related to the Java Heap Space are the following:
When the Maximum Heap Space size is too low for that is actually needed by the Java process, the following exception will be thrown: java.lang.OutOfMemoryError: Java heap space
The Perm Space is the space used by Java to store loaded classes and other static objects. The setting related to the Java Perm Space is only the following.For more information on Java Memory management, see http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf
...
When the Maximum Perm Space size is too low for that is actually needed by the Java process, the following exception will be thrown: java.lang.OutOfMemoryError: PermGen space
The above mentioned settings are settings that can be applied when launching a Java process command-line or form a .bat/.sh script. Certain application might provide other ways to specify the same settings, for example the Service component that is part of the Servoy distribution. For more information on how to configure these settings withing Servoy, read the next paragraph.
Memory management for a Servoy Application Server revolves around managing the values for the Java Heap Space and Java Perm Space.
The default values are:
Depending on how the Servoy Application Server is launched, the location where these values can be managed differs:
{serverInstall}\application_server\service\wrapper.conf
{serverInstall}\application_server\servoy_server.bat/.sh
{serverInstall}\application_server\terracotta/start_servoy_clustered.bat/.sh
The components that contribute to the Java Heap Space requirements for a Servoy Application Server consists of the following parts:
The memory usage of the a standard Servoy Application Server itself is limited to a couple of Mb.
For the database connections assume 2Mb per connection, so sum the Maximum Active connections settings on each configured and enabled Database Server and multiply that by 2Mb to determine the maximum memory consumption by the all database connections
The memory usage for the running Servoy Clients is more difficult to obtain, as it depends on the number of running Clients, the type of the running Servoy Clients, the way the Servoy Solutions that are running are built and the way the users use the these Solutions. These variables together make it difficult to provide hard numbers on how to configure the memory settings beforehand. Getting it right means monitoring and tuning.
...
Smart Client Memory usage Usage vs. other Other Servoy Client
The memory consumption of Smart Client runs on the Server is an order of magnitude lower that for client machine, not on the Servoy Application Server like the other Servoy Clients, as the Servoy Smart Client runs on the client machine, not on the Servoy Application Server. See #Smart like the Web Client, Headless Client or Batch Processor. The Smart Client is only registered with the Application Server and thus consumes far less memory on the Application Server compared to the other Servoy Clients. See Smart Client Memory management for more information on configuring the Memory settings for Smart Clients specifically.
Web Client, Headless Client & Batch processors memory usageProcessors Memory Usage
The memory usage of Web Clients, Headless Clients and Batch Processors depends highly on the design of the solution. While Servoy optimizes many things to keep the memory footprint as low as possible, it is logical that a simple solution showing just one form at the time has a different memory footprint than a solution that has a very complex UI, showing 20 Forms and/or different sets of data at the same time.
...
...
The setting that requires tuning based on the determined required memory for the Servoy Application Server is the Maximum Heap Space setting (Xmx). By default the Maximum Heap Space is set to 1028MB within Servoy. This setting should be changed when:
...
Depending on how the Servoy Application Server is started, the Memory setting need to be applied in a different location.
...
...
When starting the Servoy Application Server manually through {serverInstall}\application_server\servoy_server.bat/.sh, the memory settings for the Application Server can be configured inside servoy_server.bat/.sh:
...
.
...
...
When using the Service component to automatically launch the Servoy Application Server when the machine on which it is installed is booted, the memory settings for the Application Server can be configured inside {serverInstall}\application_server\service\wrapper.conf
by altering the wrapper.java.maxmemory
setting:
Code Block |
---|
wrapper.java.additional.4=-XX:MaxPermSize=128m # Initial Java Heap Size (in MB) wrapper.java.initmemory=32 # Maximum Java Heap Size (in MB) wrapper.java.maxmemory=2561280 |
For more information on configuring the Service component, see Running the server as Server As a service
...
When starting the Servoy Application Server is part of a Servoy Cluster, the memory settings can be configured in manually, either through {serverInstall}\application_server\servoy_server.bat/.sh
or {serverInstall}\application_server\terracotta
\/start_servoy_clustered.bat/.sh
, the memory settings for the Application Server can be configured inside the .bat/.sh, by altering the -Xmx value:
Code Block |
---|
java ... -Xmx256mDjava.awt.headless=true -Xmx1280m -Xms64m -XX:MaxPermSize=128m |
...
...
When the Servoy Application Server runs under a 32 bit JVM the maximum amount of memory that can be assigned to the Java process is 2Gb. This is a limitation of 32 bit. In order to be able to assign more memory, a 64 bit environment is required.
Initial Client Heap
Max. Client Heap
Virtual Machine Arguments
Java version
Servoy supports both Java 5 and Java 6 (for the Application Server, the Smart Client and Servoy Developer). As Java 6 has numerous performance improvements, it is preferred over Java 5.
If the hardware in which Servoy is running is 64bit, make sure to also run a 64 bit Java Virtual Machine. When in doubt which version is used, check the Servoy Admin page, under "Servoy Server Home" > "Servoy Server Status" > "JVM Information":
Note |
---|
An 32 bit JVM will allow a max memory of 2 Gb in total, In order to run with larger heap sizes (over 2 Gb) you have to use 64 bit JVM on a 64 bit OS |
Java Virtual Machine Server mode
Java has 2 distinct operating modes: client mode and server mode. When running in server mode, the startup of the Java process will take longer and initial execution of code will be slower, but after a while the application will perform faster. The server mode is best suited for the Servoy Application Server.
Whether or not a Java Virtual Machine supports client and/or server mode depends on the hardware, see http://download.oracle.com/javase/6/docs/technotes/guides/vm/server-class.html.
If the JVM supports servermode, it will automatically detect if the machine it is running on is a "capable" machine and automatically run in server or client mode depending. The definition of "capable" may differ from Java version to Java version. For Java 5/6 this means a 2CPU, 2Gb memory machine.
Checking whether or not a Servoy Application Server runs in client or server mode can be seen on the Servoy Admin page, under "Servoy Server Home" > "Servoy Server Status" > "JVM Information":
It is possible to enforce the Servoy Application Server to run in server mode (assuming the JVM is capable to operate in server mode), an extra startup argument can be added to the startup of the Servoy Application Server.
In servoy_server.sh/bat:
Code Block |
---|
java -server -Djava.awt.headless=true .....
|
When using the Service wrapper:
Code Block |
---|
# Java Additional Parameters
wrapper.java.additional.1=-Djava.awt.headless=true
wrapper.java.additional.2=-Duser.dir="C:\Servoy\application_server"
wrapper.java.additional.3=-XX:MaxPermSize=128m
wrapper.java.additional.4=-server
|
...
On Windows 32 bit environments, the Java Runtime Environment does not include support for server mode. In order to take advantage of server mode optimizations on 32 bit Windows systems, it is required to install Java Development Kit (JDK)
Memory
Processes in Java, like the Servoy Application Server, need to be told explicitly the maximum of memory they are allowed to use. This setting, the maximum heap size, is important to adjust to the load the Servoy Application Server is to handle.
The maximum heap size setting is located in {servoy_install}/application_server/servoy_server.sh/.bat, through the "Xmx" setting.
When the Application Server is started as a Service the setting can be found in {servoy_install}/application_server/service/wrapper.conf, by the name of "wrapper.java.maxmemory".
By default the maximum heap size is set to 256MB. This setting should be changed when:
...
...
.....
|
Note | ||
---|---|---|
| ||
When specifying the -Xmx and -Xms values, the following needs to be taken into account:
In a default Servoy Application Server installation, the Maximum Heap Space value (-Xmx) is set to 1280m. For servers that have limited memory, this value could be too high, resulting in the following error when trying to start the server:
Either lower the -Xmx value or make sure that more memory is available for the Java process on the server, by closing other applications or adding more physical memory to the server. |
An 32 bit JVM will allow a maximum memory assignment of 2Gb in total. In order to assign more than 2Gb of memory, a 64 bit JVM on a 64 bit OS is required.
By default the Java Heap Space size is set to 128Mb, which is a sufficient value for most deployments. A scenario in which this value needs increasing is when the Servoy Application Server is loaded up with a lot of additional plugins, beans, LAF's and drivers.
For all three scenario's that the Servoy Application Server can be started (as a service, manual stand-alone or manual clustered), the value for the Java Perm Space is controlled by the 'XX:MaxPermSize' setting in the above mentioned configuration location.
The actual memory usage of a Servoy Application Server can be observed on the Servoy Admin page. The 'Servoy Server Status' overview on the 'Servoy Server Home' page displays the allocated, used and maximum values for the Heap memory and all other spaces combined (non-Heap memory).
Similar to the Servoy Application Server, the Servoy Smart Client is also a Java application and as such the same memory management also applies to the Smart Client.
Through the Servoy Admin page, the following settings are exposed that related to the Smart Client's memory configuration:
Setting | What is does | Comment |
---|---|---|
servoy.initialClientHeap | Sets the Initial Heap Space size |
|
servoy.maxClientHeap | Sets the Maximum Heap Space size |
|
servoy.vmClientArgs | optional arguments that can be send to the Smart Client's JVM | Set to '-XX:SoftRefLRUPolicyMSPerMB=3600000' by default: this setting improves performance |
Within the Servoy Smart Client, the actual memory usage can be monitored through the Help > About menu item.