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
