by Anonymous » 02 Mar 2025, 15:01
Ich führe einen Lasttest auf System.out , system.err und logger.info (mit SLF4J + Logback) in einer Java 8 -Umgebung mit Spring Boot 2.6.0 und Logback 1.2.7 durch. Ich habe mein Projekt in ein ausführbares Glas verpackt und es unter Windows 11 mit dem folgenden Befehl ausgeführt: Java -jar -xms256m -xmx256m.
Code: Select all
@RestController
@RequestMapping("/log")
public class LogController {
private static final Logger logger = org.slf4j.LoggerFactory.getLogger(LogController.class);
private static final int LOOP_COUNT = 100;
@GetMapping("/system-out")
public String logSystemOut() {
long startTime = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
System.out.println("hello world");
}
long endTime = System.currentTimeMillis();
return "Logged messages in " + (endTime - startTime) + " ms";
}
@GetMapping("/system-err")
public String logSystemErr() {
long startTime = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
System.err.println("hello world");
}
long endTime = System.currentTimeMillis();
return "Logged messages in " + (endTime - startTime) + " ms";
}
@GetMapping("/info")
public String logInfo() {
long startTime = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
logger.info("hello world");
}
long endTime = System.currentTimeMillis();
return "Logged messages in " + (endTime - startTime) + " ms";
}
}
< /code>
Mein logback.xml -Konfiguration ist unten: < /p>
logs/happyTest.log
logs/happyTest.%d{yyyy-MM-dd}.log
30
%msg%n
0
8192
< /code>
Ich benutze JMeter auf einem anderen Computer, verwende den CLI -Modus diesen Testplan. src = "https://i.sstatic.net/nexwbrpn.png"/>
Basierend auf meinem Verständnis sollte die Leistung von System.out
und System.err ähnlich sein und im Allgemeinen niedriger als logger.info aufgrund von i configure die ch.qos.logback. />
Ja, es hat wie erwartet funktioniert. logger.info < /code> ist am besten.
signifikant langsamer. schneller im Vergleich zu system.err .
Nach der Überprüfung des Quellcode Code. Beide sind gepuffertoutputStream , nicht wie einige KI behaupten, dass System.err unbufferd ist.
Code: Select all
// java.lang.System
// ... other code
public final static PrintStream out = null;
public final static PrintStream err = null;
// ... other code
private static void initializeSystemClass() {
// ... other code
FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
setIn0(new BufferedInputStream(fdIn));
setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));
setErr0(newPrintStream(fdErr, props.getProperty("sun.stderr.encoding")));
// ... other code
}
// ... other code
private static PrintStream newPrintStream(FileOutputStream fos, String enc) {
if (enc != null) {
try {
return new PrintStream(new BufferedOutputStream(fos, 128), true, enc);
} catch (UnsupportedEncodingException uee) {}
}
return new PrintStream(new BufferedOutputStream(fos, 128), true);
}
< /code>
Warum ist die Leistung von System.err < /code> erheblich niedriger als System.out < />?
Vielen Dank für Ihre Erkenntnisse! Ich habe den Lasttest in der Ubuntu -Umgebung wiederholt.
Es gibt einige Änderungen, damit 'Test' erfolgreich ausgeführt werden kann. >. Hier "src =" https://i.static.net/j7hz37fd.png " />
Dann führen Sie den Testplan aus.
System.out< /code> Testergebnis:
System.err
Testergebnis:
Die Leistung in Ubuntu, System.out und System.err ist ähnlich. Es scheint, dass System.err < /code> Leistung niedrigerer ist, was durch die Ausführung der Umgebung eine Grundlage ist. Ich werde den Ladetest in Windows -Umgebung erneut einstellen.
Laden Sie Test.
Laden Sie Test.
Laden Sie Test.
Laden Sie Test.
Laden Sie Test.
Code: Select all
System.err< /code> Load -Test.
< /li>
< /ol>
Jeder Ladetest wird ungefähr 4 minus 4 minus absag. Alt = "Bildbeschreibung hier eingeben" src = "https://i.static.net/iykyzm2w.png"/>
Es scheint jedoch, als würde nichts geändert, das System.err
Leistung ist noch niedriger.
Ich führe einen Lasttest auf System.out , system.err und logger.info (mit SLF4J + Logback) in einer Java 8 -Umgebung mit Spring Boot 2.6.0 und Logback 1.2.7 durch. Ich habe mein Projekt in ein ausführbares Glas verpackt und es unter Windows 11 mit dem folgenden Befehl ausgeführt: Java -jar -xms256m -xmx256m.[code]@RestController
@RequestMapping("/log")
public class LogController {
private static final Logger logger = org.slf4j.LoggerFactory.getLogger(LogController.class);
private static final int LOOP_COUNT = 100;
@GetMapping("/system-out")
public String logSystemOut() {
long startTime = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
System.out.println("hello world");
}
long endTime = System.currentTimeMillis();
return "Logged messages in " + (endTime - startTime) + " ms";
}
@GetMapping("/system-err")
public String logSystemErr() {
long startTime = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
System.err.println("hello world");
}
long endTime = System.currentTimeMillis();
return "Logged messages in " + (endTime - startTime) + " ms";
}
@GetMapping("/info")
public String logInfo() {
long startTime = System.currentTimeMillis();
for (int i = 0; i < LOOP_COUNT; i++) {
logger.info("hello world");
}
long endTime = System.currentTimeMillis();
return "Logged messages in " + (endTime - startTime) + " ms";
}
}
< /code>
Mein logback.xml -Konfiguration ist unten: < /p>
logs/happyTest.log
logs/happyTest.%d{yyyy-MM-dd}.log
30
%msg%n
0
8192
< /code>
Ich benutze JMeter auf einem anderen Computer, verwende den CLI -Modus diesen Testplan. src = "https://i.sstatic.net/nexwbrpn.png"/>
Basierend auf meinem Verständnis sollte die Leistung von System.out [/code] und System.err ähnlich sein und im Allgemeinen niedriger als logger.info aufgrund von i configure die ch.qos.logback. />
Ja, es hat wie erwartet funktioniert. logger.info < /code> ist am besten. [b] signifikant langsamer. schneller im Vergleich zu [/b] system.err .
Nach der Überprüfung des Quellcode Code. Beide sind gepuffertoutputStream , nicht wie einige KI behaupten, dass System.err unbufferd ist.
[code]// java.lang.System
// ... other code
public final static PrintStream out = null;
public final static PrintStream err = null;
// ... other code
private static void initializeSystemClass() {
// ... other code
FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
setIn0(new BufferedInputStream(fdIn));
setOut0(newPrintStream(fdOut, props.getProperty("sun.stdout.encoding")));
setErr0(newPrintStream(fdErr, props.getProperty("sun.stderr.encoding")));
// ... other code
}
// ... other code
private static PrintStream newPrintStream(FileOutputStream fos, String enc) {
if (enc != null) {
try {
return new PrintStream(new BufferedOutputStream(fos, 128), true, enc);
} catch (UnsupportedEncodingException uee) {}
}
return new PrintStream(new BufferedOutputStream(fos, 128), true);
}
< /code>
Warum ist die Leistung von System.err < /code> erheblich niedriger als System.out < />?
Vielen Dank für Ihre Erkenntnisse! Ich habe den Lasttest in der Ubuntu -Umgebung wiederholt.
Es gibt einige Änderungen, damit 'Test' erfolgreich ausgeführt werden kann. >. Hier "src =" https://i.static.net/j7hz37fd.png " />
Dann führen Sie den Testplan aus.
System.out< /code> Testergebnis:
System.err[/code] Testergebnis:
Die Leistung in Ubuntu, System.out und System.err ist ähnlich. Es scheint, dass System.err < /code> Leistung niedrigerer ist, was durch die Ausführung der Umgebung eine Grundlage ist. Ich werde den Ladetest in Windows -Umgebung erneut einstellen.[code]System.out[/code] Laden Sie Test.[code]System.err[/code] Laden Sie Test.[code]System.err[/code] Laden Sie Test.[code]System.out[/code] Laden Sie Test.[code]System.out[/code] Laden Sie Test.[code]System.err< /code> Load -Test.
< /li>
< /ol>
Jeder Ladetest wird ungefähr 4 minus 4 minus absag. Alt = "Bildbeschreibung hier eingeben" src = "https://i.static.net/iykyzm2w.png"/>
Es scheint jedoch, als würde nichts geändert, das System.err [/code] Leistung ist noch niedriger.