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
.
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();
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ść
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
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.
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)
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