LATEST VERSION: 8.2.6 - CHANGELOG
Pivotal GemFire® v8.2

JVM Memory Settings and System Performance

JVM Memory Settings and System Performance

You configure JVM memory settings for the Java application by adding parameters to the java invocation. For the cache server, you add them to the command-line parameters for the gfsh start server command.

  • JVM heap size—Your JVM may require more memory than is allocated by default. For example, you may need to increase heap size for an application that stores a lot of data. You can set a maximum size and an initial size, so if you know you will be using the maximum (or close to it) for the life of the member, you can speed memory allocation time by setting the initial size to the maximum. This sets both the maximum and initial memory sizes to 1024 megabytes for a Java application:
    -Xmx1024m -Xms1024m
    Properties can be passed to the cache server on the gfsh command line:
    gfsh>start server --name=server-name --J=-Xmx1024m --J=-Xms1024m
  • MaxDirectMemorySize—The JVM has a kind of memory called direct memory, which is distinct from normal JVM heap memory, that can run out. You can increase the direct buffer memory either by increasing the maximum heap size (see previous JVM Heap Size), which increases both the maximum heap and the maximum direct memory, or by only increasing the maximum direct memory using -XX:MaxDirectMemorySize. The following parameter added to the Java application startup increases the maximum direct memory size to 256 megabytes:
    -XX:MaxDirectMemorySize=256M
    The same effect for the cache server:
    gfsh>start server --name=server-name --J=-XX:MaxDirectMemorySize=256M
  • JVM stack size---Each thread in a Java application has its own stack. The stack is used to hold return addresses, arguments to functions and method calls, and so on. Since GemFire is a highly multi-threaded system, at any given point in time there are multiple thread pools and threads that are in use. The default stack size setting for a thread in Java is 1MB. Stack size has to be allocated in contiguous blocks and if the machine is being used actively and there are many threads running in the system (Task Manager shows the number of active threads), you may encounter an OutOfMemory error: unable to create new native thread, even though your process has enough available heap. If this happens, consider reducing the stack size requirement for threads on the cache server. The following parameter added to the Java application startup limits the maximum size of the stack.
    -Xss384k
    In particular, we recommend starting the cache servers with a stack size of 384k or 512k in such cases. For example:
    gfsh>start server --name=server-name --J=-Xss384k
    
    gfsh>start server --name=server-name --J=-Xss512k