Почему производительность System.err значительно ниже, чем System.out в Java?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему производительность System.err значительно ниже, чем System.out в Java?

Сообщение Anonymous »

Я провожу тест на загрузку на System.out , System.err и logger.info (с использованием SLF4J + ROGACK) в среде Java 8 с Spring Boot 2.6. 0 и отделить 1.2.7. Я упаковал свой проект в исполняемую банку и запустил его в Windows 11, используя следующую команду: java -jar -xms256m -xmx256m. \ HappyTest -1.0.2 -snapshot.jar>. \ Logs \ HappyTest2.log 2> & 1 < /code>.

Вот код API: < /p>

Код: Выделить всё

@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>
my recoverback.xml Конфигурация ниже: < /p>




logs/happyTest.log

logs/happyTest.%d{yyyy-MM-dd}.log
30


%msg%n




0
8192







Я использую jmeter в другом компьютере, используйте режим CLI. Запустите этот план испытания.

Обратите внимание, что каждый разные API просто изменяет путь запроса на тест. .net/nexwbrpn.png "/>
на основе моего понимания, производительность system.out и system.err должна быть одинаковой и в целом ниже, чем logger.info В связи с тем, что я настраиваю ch.qos.logback.classic.asyncappender < /code> in rouge.xml.

Да, это работало, как я ожидал. logger.info < /code> лучше. >
Вот System.err < /code> производительность. значительно медленнее.

Вот система .out Выработка. быстрее по сравнению с system.err .

После просмотра исходного кода System.java я заметил, что различные из System.out и System.err только дескриптор Encode и File. Оба они буфериальны, не так, как некоторые утверждают, что система.// 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>
Итак, почему производительность system.err < /code> значительно ниже, чем System.out < /code>?

Спасибо за понимание !


Подробнее здесь: https://stackoverflow.com/questions/794 ... m-out-in-j
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»