RFR: 7164841: Improvements to the GC log file rotation

Bengt Rutisson bengt.rutisson at oracle.com
Mon Aug 26 04:47:13 PDT 2013


Hi Yumin and Tao,

I have not reviewed the code change but I have a comment inlined below.

On 8/24/13 1:05 AM, Yumin Qi wrote:
> Tao,
>
>   Thanks for your review.
>
> On 8/23/2013 3:33 PM, Tao Mao wrote:
>> Hi,
>>
>> I reviewed most of the code and test-ran a build from it. It's a very 
>> cool and important improvement.
>>
>> Thank you for putting together these on our wishlist for long.
>>
>> Below are some comments.
>>
>> 1. src/share/vm/runtime/arguments.cpp
>>
>> - 1853 "To enable GC log rotation, use -Xloggc:<filename> 
>> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files> 
>> -XX:GCLogFileSize=<num_of_size>[k|K|m|M]\n"
>> + 1853 "To enable GC log rotation, use -Xloggc:<filename> 
>> -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<num_of_files> 
>> -XX:GCLogFileSize=<num_of_size>[k|K|m|M|g|G]\n"
>>
>> Please consider adding [g|G] to GCLogFileSize suggestion.
>>
>> I worked on a problem of enabling gc log limit over 2G (JDK-7122222). 
>> So it seems that customers sometimes want gc logs to be very large.
>>
> Sure, will add.
>> 2. src/share/vm/runtime/arguments.hpp
>>
>> (1) with the current changeset, we only append date&time to file_name 
>> w/ +UseGCLogFileRotation; if not, we won't have date&time info.
>>
>> I think it would be useful to let both cases (w/ and w/o 
>> UseGCLogFileRotation) have date&time in order to solve the 
>> overwritten problem (e.g. JDK-8020667). In fact, having that, we 
>> actually solve JDK-8020667.
>>
>> If you want to have that, basically you need to work on the 
>> FileStream constructor methods fileStream().
>>
> I can change that, if no objection from others. This also will 
> simplify the setting of file name here.

I think appending a timestamp to the log file name is a nice idea, but I 
think it is also a bit scary. There are users who restart their 
applications regularly. With the suggested idea such users will now risk 
filling up their disk space with log files. I imagine that that will not 
be appreciated by everyone. Such a change should probably be discussed 
more thoroughly than just in a review request.

Thanks,
Bengt


>
>> (2) Would it be better to rename method name reformat_filename() to 
>> extend_filename()?
>>
>> (3) Typos and suggestion
>> 537 // rotate file in names filename.0, filename.1, ..., 
>> filename.<NumberOfGCLogFiles - 1>
>> *=> extended_filename.0*
>>
>> 538 // filename contains pid and time when the fist file created. The 
>> current filename is
>> *=> *the*first *file created.
>>
>> 539 // gc_log_file_name + pid<pid> + YYYY-MM-DD_HH-MM-SS.<i>.current, 
>> where i is current
>> 540 // rotation file number. After it reaches max file size, the file 
>> will be saved and
>> 541 // renamed with .current removed from its tail.
>>
> Will change that.
>> 3. For your point 5), I don't quite get it. In my test-run, I tried 
>> to change file permission to unreadable and unwritable, but VM would 
>> later change the permission back anyway.
>>
>> So could you bring up some use cases of that functionality to give 
>> more details?
>>
> Changing file permission will not stop the file create, in this 
> rotation, the file opened/saved/removed/renamed -> then repeat. What I 
> have done is change the while directory to read only, then the create 
> failed so rotation stopped.
>
>> 4. Will you write jtreg tests for this functionality? It looks 
>> possible to write some tests, at least checking the format of log names.
>>
> Good suggestion, I will add one.
>
>> Thanks.
>> Tao
>>
>> On 8/23/13 7:53 AM, Yumin Qi wrote:
>>> Could I get  a GC staff review the change? Need more reviewers to 
>>> push this in.
>>>
>>> Thanks
>>> Yumin
>>>
>>> On 8/21/2013 3:43 PM, Yumin Qi wrote:
>>>> Hi, all
>>>>
>>>>   This is second version after feedback from first round.
>>>>   The changes are:
>>>>
>>>>   1) file name will be based on gc log file name 
>>>> (-Xloggc:filename), pid (process id) and time when the first 
>>>> rotation file created:
>>>>        <filename>-pid<pid>-YYYY-MM-DD_HH-MM-SS
>>>>   2) If rotate in same file, file name is as in 1), if rotate in 
>>>> multiple files, .<i> will append to above file name.
>>>>   3) every time file rotated, file name and time when file created 
>>>> will be logged to head/tail, this is same as first version.
>>>>   4) current file has name 
>>>> <filename>-pid<pid>-YYYY-MM-DD_HH-MM-SS.<i>.current
>>>>        This is similar to first version.
>>>>        By adapting such name format we will never loss logs in case 
>>>> apps stops and restart, the log files will not be overwritten since 
>>>> time stamp in file names.
>>>>    5) If open file failed, turn off gc log rotation.
>>>>         If due to some reason, file operation failed (such as 
>>>> permission changed etc), with log file opened, logging still works, 
>>>> but at
>>>>         saving and renaming, the file operation will fail, this 
>>>> will lead not all files saved.
>>>>
>>>> http://cr.openjdk.java.net/~minqi/7164841/webrev01
>>>>
>>>>      Tested with jtreg, JPRT.
>>>>
>>>> Thanks
>>>> Yumin
>>>>
>>>> On 8/15/2013 8:35 AM, Yumin Qi wrote:
>>>>> Hi,
>>>>>
>>>>>   Can I have your review for this small changes?
>>>>> http://cr.openjdk.java.net/~minqi/7164841/webrev00/ 
>>>>> <http://cr.openjdk.java.net/%7Eminqi/7164841/webrev00/>
>>>>>
>>>>>    This is for a enhancement to add head/tail message to the 
>>>>> logging files to assist reading GC output.
>>>>>    1. modified prompt message if invalid arguments used for log 
>>>>> rotating;
>>>>>    2. add time and file name message to log file head/tail.
>>>>>    3. for easily identify which log file is current, use file name 
>>>>> like <filename>.n.current, after it reaches maximum size, rename 
>>>>> it to <filename>.n
>>>>>         On Windows, there is no F_OK (existing test) definition, 
>>>>> F_OK is defined as "0" and for _access of VC++, it just describes:
>>>>>
>>>>> modevalue
>>>>>
>>>>>
>>>>>
>>>>> Checks file for
>>>>>
>>>>> 00
>>>>>
>>>>>
>>>>>
>>>>> Existence only
>>>>>
>>>>> 02
>>>>>
>>>>>
>>>>>
>>>>> Write-only
>>>>>
>>>>> 04
>>>>>
>>>>>
>>>>>
>>>>> Read-only
>>>>>
>>>>> 06
>>>>>
>>>>>
>>>>>
>>>>> Read and write
>>>>>
>>>>>
>>>>> http://msdn.microsoft.com/en-us/library/1w06ktdy.aspx
>>>>> The definition are consistent with unistd.h.
>>>>>
>>>>>     Test: JPRT and jtreg.
>>>>>
>>>>>    Thanks
>>>>>    Yumin
>>>>
>>>
>
>



More information about the hotspot-runtime-dev mailing list