Как включить собственное отслеживание памяти в службе Windows, которая читает параметры Java из реестра и создает JVM? - PullRequest
1 голос
/ 25 октября 2019

У нас есть служба Windows, которая читает java_options из реестра и создает пользовательскую JVM, в рамках которой она выполняет часть java. Хотя мы еще не сталкивались с ошибкой нехватки памяти, но наше долго работающее приложение, кажется, пересекает указанный предел памяти (с которым мы ожидаем, что он будет работать). тем не менее, в последнее время мы сталкивались с проблемами, о которых сообщалось на производстве, что имели место нарушения памяти.

Чтобы определить, где именно мы можем уменьшить объемы памяти для нашего приложения, мы должны иметь возможность включить NativeMemoryTrackingв нашем приложении. поскольку мы создаем пользовательский jvm, явно не помогает использование -XX: NativeMemoryTracking = summary. даже после добавления он не отображает родную разбивку памяти для нашей службы Windows. Он завершается неудачно, если собственное отслеживание сообщений не включено.

Вот как мы создаем пользовательский jvm в приведенном ниже коде snippet.sinceя уже проверял, что он может читать другие аргументы vm, такие как -Xmx или -Xmn из java_options в нашем приложении, я надеялся, что он сможет читать -XX: NativeMemoryTracking = summary. но я не знаю, почему он не принимает NMT, но может принимать другие аргументы VM.

    JavaVMInitArgs vm_args; 


    vm_args.version = 0x00010002; 
    vm_args.options = options; 
    vm_args.nOptions = optionCounter; 
    vm_args.ignoreUnrecognized = JNI_TRUE; 

           /* Create the Java VM */ 
    Debug(_T("[ENV] Going to create JVM"));


    jint res = JNI_CreateJavaVM(&m_pJvm, (void**)&env, &vm_args);

Я ожидаю, что с использованием XX: NativeMemoryTracking = summary я должен иметь возможность получить сводную разбивку памятииспользование моей службы Windows для того, чтобы погрузиться в область памяти, чья память может быть предназначена для уменьшения.

, но я вижу, что Native memory trackng не активируется, когда я запускаю JCMD с идентификатором процесса моегосервис.

...