Jak pobrać argumenty maszyny Wirtualnej z wnętrza aplikacji java?

Muszę sprawdzić, czy jakaś opcja, która może być przekazana do JVM jest jawnie ustawiona lub ma domyślną wartość.

Mówiąc dokładniej:
Muszę utworzyć jeden konkretny wątek z większym natywnym rozmiarem stosu niż domyślny, ale jeśli użytkownik chce sam zająć się takimi rzeczami przez podanie opcji -Xss chcę utworzyć wszystkie wątki z domyślnym rozmiarem stosu (który zostanie określony przez użytkownika w opcji-Xss).

Sprawdziłem klasy jak java.lang.System i java.lang.Runtime, ale nie dają mi informacji o vmargs.

Czy jest jakiś sposób, aby uzyskać informacje, których potrzebuję?
Author: Oscar Pérez, 2009-09-29

5 answers

Za pomocą tego kodu można uzyskać argumenty JVM:

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
...
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
 154
Author: David Schuler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 14:19:15

Przy starcie podaj to -Dname=value

A następnie w kodzie należy użyć

value=System.getProperty("name");

Aby uzyskać tę wartość

 163
Author: Java_Freak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-26 11:53:37

Nie próbowałem dokładnie uzyskać ustawień maszyny wirtualnej, ale jest wiele informacji w narzędziach JMX, w szczególności narzędziach MXBean. Od tego bym zaczął. Mam nadzieję, że znajdziesz tam coś, co ci pomoże.

Strona sun ma kilka na temat technologii:

Http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html

 2
Author: reccles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-02 03:02:41

Znalazłem, że HotSpot wyświetla wszystkie argumenty maszyny Wirtualnej w fasoli zarządzania z wyjątkiem-client I-server. Tak więc, jeśli wywnioskujesz argument-client/ - server z nazwy maszyny wirtualnej i dodasz go do listy runtime management bean, otrzymasz pełną listę argumentów.

Oto SSCCE:

import java.util.*;
import java.lang.management.ManagementFactory;

class main {
  public static void main(final String[] args) {
    System.out.println(fullVMArguments());
  }

  static String fullVMArguments() {
    String name = javaVmName();
    return (contains(name, "Server") ? "-server "
      : contains(name, "Client") ? "-client " : "")
      + joinWithSpace(vmArguments());
  }

  static List<String> vmArguments() {
    return ManagementFactory.getRuntimeMXBean().getInputArguments();
  }

  static boolean contains(String s, String b) {
    return s != null && s.indexOf(b) >= 0;
  }

  static String javaVmName() {
    return System.getProperty("java.vm.name");
  }

  static String joinWithSpace(Collection<String> c) {
    return join(" ", c);
  }

  public static String join(String glue, Iterable<String> strings) {
    if (strings == null) return "";
    StringBuilder buf = new StringBuilder();
    Iterator<String> i = strings.iterator();
    if (i.hasNext()) {
      buf.append(i.next());
      while (i.hasNext())
        buf.append(glue).append(i.next());
    }
    return buf.toString();
  }
}

Może być skrócony, jeśli chcesz argumenty w List<String>.

Ostatnia uwaga: możemy również chcieć rozszerzyć tę opcję, aby obsłużyć rzadki przypadek posiadania spacji w wierszu poleceń argumenty.

 2
Author: Stefan Reich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-15 10:12:44

Jeśli chcesz mieć cały wiersz poleceń procesu java, możesz użyć: JvmArguments.java (używa kombinacji JNA + /proc do pokrycia większości implementacji Uniksa)

 0
Author: user2179737,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 14:02:13