在FreeBSD系统上,在下面的顶部输出中,mysql守护进程处于“sbwait”状态。这意味着什么?
last pid: 12833; load averages: 0.18, 0.26, 0.25 up 3+17:40:21 04:58:46
26 processes: 1 running, 25 sleeping
CPU: 16.5% user, 0.0% nice, 12.8% system, 6.8% interrupt, 63.9% idle
Mem: 184M Active, 137M Inact, 88M Wired, 6308K Cache, 53M Buf, 7192K Free
Swap: 4096M Total, 420K Used, 4095M Free
PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND
1772 mysql 17 30 0 224M 165M sbwait 511:31 14.79% mysqld
12833 root 1 20 0 9944K 1488K RUN 0:00 0.10% top
1472 root 1 20 0 9612K 828K select 5:07 0.00% powerd
1465 root 1 20 0 11296K 1644K select 2:01 0.00% ntpd
1804 root 1 20 0 11324K 2140K select 0:37 0.00% sendmail
1403 root 1 20 0 12200K 2320K select 0:27 0.00% nmbd
1814 root 1 20 0 9644K 1004K nanslp 0:08 0.00% cron
1407 root 1 20 0 20756K 3756K select 0:06 0.00% smbd
1273 root 1 20 0 9612K 1036K select 0:04 0.00% syslogd
11937 root 1 20 0 15788K 3124K select 0:03 0.00% sshd
1808 smmsp 1 20 0 11324K 1864K pause 0:01 0.00% sendmail
1438 root 1 20 0 20840K 3696K select 0:00 0.00% smbd
1111 _dhcp 1 20 0 9540K 1136K select 0:00 0.00% dhclient
11941 root 1 20 0 10940K 2024K pause 0:00 0.00% csh
1517 mysql 1 52 0 9924K 1072K wait 0:00 0.00% sh
1073 root 1 47 0 9540K 1012K select 0:00 0.00% dhclient
1797 root 1 20 0 13064K 1892K select 0:00 0.00% sshd
答案 0 :(得分:7)
这意味着进程中进程中的一个线程正在等待数据到达套接字。对于像mysqld这样的线程进程,top的默认模式不是很有用;虽然你有17个mysql线程,top只能在这种模式下显示其中一个。您应该使用'-H'标志顶部(或顶部的'H'键盘命令)分别查看各个线程,这将显示每个线程的不同状态。
答案 1 :(得分:3)
使用来源:
find /usr/src -type f -exec grep -H sbwait {} \+
这将为您提供一些文件。
查看/usr/src/sys/kern/uipc_sockbuf.c
:
/*
* Wait for data to arrive at/drain from a socket buffer.
*/
int
sbwait(struct sockbuf *sb)
{
SOCKBUF_LOCK_ASSERT(sb);
sb->sb_flags |= SB_WAIT;
return (msleep(&sb->sb_cc, &sb->sb_mtx,
(sb->sb_flags & SB_NOINTR) ? PSOCK : PSOCK | PCATCH, "sbwait",
sb->sb_timeo));
}