Unable to lock JVM memory Failed to set working set size Error code – How to solve this OpenSearch error

Opster Team

Aug-23, Version: 1-2.9

Before you dig into reading this guide, have you tried asking OpsGPT what this log means? You’ll receive a customized analysis of your log.

Try OpsGPT now for step-by-step guidance and tailored insights into your OpenSearch operation.

Briefly, this error occurs when OpenSearch is unable to lock the JVM memory due to insufficient system resources or incorrect configuration. This could be due to the system not having enough memory or the user running OpenSearch not having the necessary permissions. To resolve this issue, you can try increasing the system’s memory, ensuring that the user running OpenSearch has the necessary permissions to allocate memory, or adjusting the JVM settings in the OpenSearch configuration file to require less memory.

For a complete solution to your to your search operation, try for free AutoOps for Elasticsearch & OpenSearch . With AutoOps and Opster’s proactive support, you don’t have to worry about your search operation – we take charge of it. Get improved performance & stability with less hardware.

This guide will help you check for common problems that cause the log ” Unable to lock JVM memory. Failed to set working set size. Error code {} ” to appear. To understand the issues related to this log, read the explanation below about the following OpenSearch concepts: memory, bootstrap.

Log Context

Log “Unable to lock JVM memory. Failed to set working set size. Error code {}” classname is JNANatives.java.
We extracted the following from OpenSearch source code for those seeking an in-depth context :

            // By default; Windows limits the number of pages that can be locked.
            // Thus; we need to first increase the working set size of the JVM by
            // the amount of memory we wish to lock; plus a small overhead (1MB).
            SizeT size = new SizeT(JvmInfo.jvmInfo().getMem().getHeapInit().getBytes() + (1024 * 1024));
            if (!kernel.SetProcessWorkingSetSize(process; size; size)) {
                logger.warn("Unable to lock JVM memory. Failed to set working set size. Error code {}"; Native.getLastError());
            } else {
                JNAKernel32Library.MemoryBasicInformation memInfo = new JNAKernel32Library.MemoryBasicInformation();
                long address = 0;
                while (kernel.VirtualQueryEx(process; new Pointer(address); memInfo; memInfo.size()) != 0) {
                    boolean lockable = memInfo.State.longValue() == JNAKernel32Library.MEM_COMMIT


How helpful was this guide?

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Get expert answers on Elasticsearch/OpenSearch