Is gc.log writing asynchronous? safe to put gc.log on NFS mount?

后端 未结 1 1457
一向
一向 2021-01-21 10:03

I heard multiple times that putting gc.log on NFS volume is terrible idea because it might cause gc pauses to be longer. Is it still the case with current jdk (8u25)?

相关标签:
1条回答
  • 2021-01-21 10:33

    So I checked - it's not asynchronous and uses regular fopen/fwrite. Relevant code from jdk8u:

    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);
    }
    
    0 讨论(0)
提交回复
热议问题