Wie erhöhe ich das Limit von / proc / pid / cmdline 4096 byte?
Für meine Java-Anwendungen mit sehr langen klassenpfade, ich kann nicht sehen, die main-Klasse angegeben, in der Nähe des Ende der arg-Liste bei der Verwendung von ps. Ich denke, dies rührt von meinem Ubuntu system die Größe begrenzen auf /proc/pid/cmdline. Wie kann ich dieses limit anzuheben?
InformationsquelleAutor der Frage user27635 | 2008-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht ändern, das dynamisch ist, wird die Grenze hart codiert in den kernel PAGE_SIZE in fs/proc/base.c:
InformationsquelleAutor der Antwort Robert Gamble
Zum betrachten der Java-Prozesse jps ist sehr nützlich.
Dies gibt Ihnen die main-Klasse und jvm-args:
InformationsquelleAutor der Antwort Kevin Cross
Ich vorübergehend bekommen, um die 4096 Zeichen Kommandozeilen-argument Einschränkung von ps (oder eher /proc/PID/cmdline) ist mit einem kleinen Skript zum ersetzen der java-Befehl.
Während der Entwicklung habe ich immer einen ausgepackt JDK-version von SUN und verwenden Sie niemals die installierte JRE oder JDK von dem OS egal ob Linux oder Windows (zB. laden Sie die bin gegenüber der U /min.bin).
Ich empfehle nicht, ändern Sie das Skript für Ihre Standard-Java-installation (z.B. weil es brechen kann aktualisiert oder überschrieben oder Probleme erstellen, oder ...)
Vorausgesetzt, die java-Befehl wird in /x/jdks/jdk1.6.0_16_x32/bin/java
ersten Schritt die tatsächliche binäre Weg:
dann erstellen Sie ein Skript /x/jdks/jdk1.6.0_16_x32/bin/java, wie z.B.:
und dann machen Sie das Skript ausführbar
im Fall von kopieren und einfügen der oben genannten, sollten Sie sicherstellen, dass es keine zusätzlichen Leerzeichen in /x/jdks/jdk1.6.0_16_x32/bin/java und #!/bin/bash in der ersten Zeile
Der komplette Befehl Linie endet in z.B. /tmp/java.26835.cmdline wo 26835 ist die PID der shell-Skript.
Ich denke, es gibt auch einige shell-limit auf die Anzahl der Kommandozeilen-Argumente, kann mich nicht erinnern, aber es war möglicherweise 64K Zeichen.
ändern Sie das Skript zum entfernen der Befehlszeile text von /tmp/java.PROCESS_ID.cmdline
am Ende
Nachdem ich die commandline, ich habe immer verschieben Sie das Skript nach so etwas wie "java.Skript" und kopieren (cp -a) wird die tatsächliche binäre java.orig zurück zu java. Ich habe nur das Skript verwenden, wenn ich auf die 4K Grenze.
Besteht möglicherweise ein Problem mit escaped Zeichen und vielleicht sogar Leerzeichen in Pfaden oder so, aber es funktioniert gut für mich.
InformationsquelleAutor der Antwort
Können Sie
jconsole
um Zugang zu der originalen Befehlszeile ohne die Länge begrenzt.InformationsquelleAutor der Antwort Matt
Ist es möglich, verwenden neuere linux-Distributionen, wo diese Grenze wurde entfernt, beispielsweise RHEL 6.8 oder höher
"/Proc/pid/cmdline-Datei Längenbegrenzung für den ps-Befehl wurde zuvor hart codiert in den kernel zu 4096 Zeichen. Dieses update stellt sicher, dass die Länge von /proc/pid/cmdline ist unbegrenzt, und das ist besonders nützlich für die Auflistung von Prozessen mit langer Befehl Linie Argumente. (BZ#1100069)"
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/6.8_Release_Notes/new_features_kernel.html
InformationsquelleAutor der Antwort riverfall
Für Java-basierte Programme, in denen Sie interessiert sind, in der Inspektion der command line args deiner main Klasse haben, können Sie ausführen:
InformationsquelleAutor der Antwort kamstrup
Ich bin mir ziemlich sicher, dass, wenn Sie tatsächlich sehen, die Argumente, die abgeschnitten in /proc/$pid/cmdline dann bist du tatsächlich die überschreitung der maximalen argument Länge, unterstützt durch das OS. Soweit ich das beurteilen kann, in Linux, die Größe ist beschränkt auf die Speicherseite. Sehen "ps ww" Längenbeschränkung für Referenz.
Der einzige Weg, das zu umgehen, wäre den kernel neu kompilieren. Wenn Sie interessiert sind, so weit gehen, diese zu lösen, dann können Sie feststellen, dieser Beitrag nützlich: "Argument list too long": Über Argumente und Einschränkungen
Zusätzliche Referenz:
ARG_MAX maximale Länge von Argumenten für einen neuen Prozess
InformationsquelleAutor der Antwort Jay
Vielleicht 'w' parameter in ps ist, was Sie wollen. Fügen Sie zwei 'w' für mehr Leistung. Es sagt ps zu ignorieren, die Linienbreite des Terminals.
InformationsquelleAutor der Antwort caskey