Hello,

Our system is sunfire v890 running  solaris 10 08/07 release. The problem we 
are experiencing is cpu hog process.

I find the pattern using 'truss -f -p pid' is as following:
 
lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000) = 0xFFBFFEFF [0x0000FFFF]
27082:  pollsys(0xFFBFD560, 17, 0xFFBFF5C8, 0x00000000) = 1
27082:  lwp_sigmask(SIG_SETMASK, 0xFFBFFAFF, 0x0000FFF7) = 0xFFBFFEFF 
[0x0000FFFF]
27082:  sigaction(SIGPIPE, 0xFFBFF388, 0xFFBFF428)      = 0
27082:  pollsys(0xFFBFD3F8, 1, 0xFFBFF460, 0x00000000)  = 1
27082:  sigaction(SIGPIPE, 0xFFBFF388, 0xFFBFF428)      = 0
27082:  recvfrom(386, "\r\n\r\n", 8, 2, 0xFFBFF4B4, 0xFFBFF4C4) = 4
27082:  time()                                          = 1245355435
27082:  time()                                          = 1245355435
27082:  time()                                          = 1245355435

On dev server, which doe NOT have the problem, the truss output is as following:
9050:  lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0x0000FFF7) = 0xFFBFFEFF 
[0x0000FFFF]
19050:  lwp_sigmask(SIG_SETMASK, 0xFFBFFAFF, 0x0000FFF7) = 0xFFBFFEFF 
[0x0000FFFF]
19050:  pollsys(0xFFBFEC10, 7, 0xFFBFF048, 0x00000000)  = 0
19050:  lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000) = 0xFFBFFEFF 
[0x0000FFFF]
19050:  pollsys(0xFFBFD308, 13, 0xFFBFF370, 0x00000000) = 1
19050:  lwp_sigmask(SIG_SETMASK, 0xFFBFFAFF, 0x0000FFF7) = 0xFFBFFEFF 
[0x0000FFFF]
19050:  sigaction(SIGPIPE, 0xFFBFEF98, 0xFFBFF038)      = 0
19050:  write(115, " 0 0 7 5 1   - 1   2 0  ".., 79)    = 79
19050:  sigaction(SIGPIPE, 0xFFBFEF98, 0xFFBFF038)      = 0
19050:  time()                                          = 1245355630
19050:  time()                                          = 1245355630
19050:  time()                                          = 1245355630

Looks like the difference is after sigaction, the problematic process is in 
dead loop while the normal one is taking write action.

I tried dtrace to capture the difference as following:
#!/usr/sbin/dtrace -qs
proc:::signal-send
/args[2] == SIGPIPE/
{
        printf ( "SIGPIPE was sent by %s pid = %d \n", 
args[1]->pr_fname,args[1]->pr_pid);
}

This doesn't work as SIGPIPE is not a signal. Could anyone suggest the right 
approach?

Thanks in advance,

zhu




      __________________________________________________________________
Yahoo! Canada Toolbar: Search from anywhere on the web, and bookmark your 
favourite sites. Download it now
http://ca.toolbar.yahoo.com.
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to