Java gc.log写入是异步的吗?将gc.log放在NFS装载上是否安全?
我多次听说将gc.log放在NFS卷上是个糟糕的主意,因为这可能会导致gc暂停时间更长。当前的jdk(8u25)仍然是这样吗?所以我检查了一下-它不是异步的,并且使用常规的fopen/fwrite:Java gc.log写入是异步的吗?将gc.log放在NFS装载上是否安全?,java,performance,garbage-collection,nfs,Java,Performance,Garbage Collection,Nfs,我多次听说将gc.log放在NFS卷上是个糟糕的主意,因为这可能会导致gc暂停时间更长。当前的jdk(8u25)仍然是这样吗?所以我检查了一下-它不是异步的,并且使用常规的fopen/fwrite: 我不明白这为什么会改变。在最常见的情况下,使gc日志异步将不利于性能。。。不需要异步的地方。如果你真的,真的想知道:1)测试它或2)阅读源代码。 gcLogFileStream::gcLogFileStream(const char* file_name) { _cur_file_num =
我不明白这为什么会改变。在最常见的情况下,使gc日志异步将不利于性能。。。不需要异步的地方。如果你真的,真的想知道:1)测试它或2)阅读源代码。
gcLogFileStream::gcLogFileStream(const char* file_name) {
_cur_file_num = 0;
_bytes_written = 0L;
_file_name = make_log_name(file_name, NULL);
// gc log file rotation
if (UseGCLogFileRotation && NumberOfGCLogFiles > 1) {
char tempbuf[FILENAMEBUFLEN];
jio_snprintf(tempbuf, sizeof(tempbuf), "%s.%d" CURRENTAPPX, _file_name, _cur_file_num);
_file = fopen(tempbuf, "w");
} else {
_file = fopen(_file_name, "w");
}
if (_file != NULL) {
_need_close = true;
dump_loggc_header();
} else {
warning("Cannot open file %s due to %s\n", _file_name, strerror(errno));
_need_close = false;
}
}
void gcLogFileStream::write(const char* s, size_t len) {
if (_file != NULL) {
size_t count = fwrite(s, 1, len, _file);
_bytes_written += count;
}
update_position(s, len);
}