I got this resolved, it's a bug in my java code. I didn't close the error 
stream, which means tail's stderr was piped to the java program too. I did not 
consume any error output, and after a month the stderr buffer got full, that 
caused tail to block.

Thanks.

在 2013-2-8,下午11:01,Cryptographrix <[email protected]> 写道:

> If it's happening when some type of log rotation rotates the log out, there 
> is a good possibility that tail catches the EOF when log rotation kicks the 
> process that created the file and tail dies.
> 
> I believe the retry feature of tail may not necessarily retry after what it 
> sees as an EOF, and that would probably be intentional.
> 
> To test this, you can tail the file yourself when log rotation is going to 
> run.  If you go back to shell, then you need to write a retry into the Java 
> code you're writing to compensate.
> 
> It may very likely be that Oracle added STDIN limitations into Java with the 
> latest releases as well.
> 
> 
> On Feb 8, 2013 9:36 AM, "Liu Haifeng" <[email protected]> wrote:
>> We are developing our own tailer now, but I want to find out what happened 
>> with gnu tail or oracle java.
>> 
>> On Feb 8, 2013, at 10:03 PM, Cryptographrix <[email protected]> wrote:
>> 
>>> I do not know what limitations STDIN has on it in java offhand, but it 
>>> sounds like this is what you are trying to do:
>>> 
>>> http://www.informit.com/guides/content.aspx?g=java&seqNum=226
>>> 
>>> 
>>> 
>>> 
>>> On Thu, Feb 7, 2013 at 11:52 PM, Liu Haifeng <[email protected]> wrote:
>>>> Hi
>>>> 
>>>> I have a log transport agent written in java which creates a sub process 
>>>> that executing "tail -F a.log" to tail log file,and the output is piped to 
>>>> the main java process,thus I can read and transport log content using java.
>>>> 
>>>> This worked fine in the past 30 days,but now it seams the java process 
>>>> can't read any data. I checked java thread stack, it's blocked on 
>>>> Java.io.FileInputStream.readBytes.
>>>> 
>>>> The log file I am tailing is rotated every one hour,and the fault happened 
>>>> at the moment the rotating script is supposed to run.
>>>> 
>>>> Currently I have no idea about this fault. Here following by some status 
>>>> of the tail process, not more as I don't have the root privilege.
>>>>  
>>>> #cat /proc/28195/status
>>>>  
>>>> Name:   tail
>>>> State:  S (sleeping)
>>>> SleepAVG:       78%
>>>> Tgid:   28195
>>>> Pid:    28195
>>>> PPid:   28143
>>>> TracerPid:      0
>>>> Uid:    0       0       0       0
>>>> Gid:    0       0       0       0
>>>> FDSize: 256
>>>> Groups: 0 1 2 3 4 6 10
>>>> VmPeak:     3828 kB
>>>> VmSize:     3828 kB
>>>> VmLck:         0 kB
>>>> VmHWM:       524 kB
>>>> VmRSS:       524 kB
>>>> VmData:      180 kB
>>>> VmStk:        88 kB
>>>> VmExe:        36 kB
>>>> VmLib:      1468 kB
>>>> VmPTE:        36 kB
>>>> StaBrk: 198b3000 kB
>>>> Brk:    198d4000 kB
>>>> StaStk: 7fff7679c1d0 kB
>>>> Threads:        1
>>>> SigQ:   0/32768
>>>> SigPnd: 0000000000000000
>>>> ShdPnd: 0000000000000000
>>>> SigBlk: 0000000000000004
>>>> SigIgn: 0000000000000003
>>>> SigCgt: 0000000000000000
>>>> CapInh: 0000000000000000
>>>> CapPrm: 00000000fffffeff
>>>> CapEff: 00000000fffffeff
>>>> Cpus_allowed:  
>>>> 00000000,00000000,00000000,00000000,00000000,00000000,ffffffff,ffffffff
>>>> Mems_allowed:   00000000,00000001
>>>>  
>>>> #cat /proc/28195/stat
>>>> 28195 (tail) S 28143 28138 27881 0 -14202496 141 0 1 0 10328 53939 0 0 18 
>>>> 0 1 0 214643641 3919872 131 18446744073709551615 1 1 0 0 0 0 4 3 0 
>>>> 18446744073709551615 0 0 17 2 0 0 1
>>>>  
>>>> #yum list|grep coreutils
>>>> coreutils.x86_64                           5.97-34.el5_8.1             
>>>> installed
>>>> policycoreutils.x86_64                     1.33.12-14.8.el5            
>>>> installed
>>>> policycoreutils-gui.x86_64                 1.33.12-14.8.el5            base
>>>> policycoreutils-newrole.x86_64             1.33.12-14.8.el5            base

Reply via email to