hase is api код: < /p>
api: < /p>
вот код API: < /p>
hase: < /p>
hase: < /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
< /code>
Я использую jmeter в другом компьютере, используйте режим CLI. Запустите этот план тестирования.
Обратите внимание, что каждый другой API просто изменяет путь запроса на тестирование. src = "https://i.sstatic.net/nexwbrpn.png"/>
на основе моего понимания, производительность system.out
Да, это сработало, как я ожидал. logger.info < /code> лучше. значительно медленнее.
Вот System.out reference. быстрее по сравнению с system.err .
после просмотра исходного кода системы. Java, я заметил, что System.out и System.err. Оба они буфериальны, не так, как некоторые утверждают, что система.
Код: Выделить всё
// 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>?
Спасибо за понимание! Я повторно подвергаю нагрузку в среде Ubuntu.
Есть некоторые изменения, чтобы «тест» успешно запустить.
the loop_count < /code> в коде API -кода на 500.
run project command: nohup java -jar -xms256 --xmx2566. > ./logs/happytest2.log 2> ./logs/happytest3.log &
Затем запустите план тестирования.
Код: Выделить всё
System.out< /code> Результат теста:
System.err
Это показывает производительность в ubuntu, system.out и system.err . Похоже, System.err < /code> производительность более низкой является причиной, основанной на среде пробежки. Я повторяю тест на загрузку в среде Windows.
моя тестовая последовательность, как ниже: < /p>
[*] Запуск проекта Java в компьютере Windows. < /Li>
Код: Выделить всё
System.out
[*]
Код: Выделить всё
System.err
[*]
Код: Выделить всё
System.err
[*]
Код: Выделить всё
System.out
[*]
Код: Выделить всё
System.out
Код: Выделить всё
System.err< /code> Загрузочный тест.
< /li>
< /ol>
Каждый нагрузочный тест будет примерно 4 минуты. alt = "Введите описание изображения здесь" src = "https://i.sstatic.net/iykyzm2w.png"/>
Однако, похоже, ничего не изменяется, System.err
Подробнее здесь: https://stackoverflow.com/questions/794 ... m-out-in-j