6

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
4

2 に答える 2

7

これは、プロセス内のプロセス内のスレッドの 1 つが、データがソケットに到着するのを待っていることを意味します。top のデフォルト モードは、mysqld のようなスレッド化されたプロセスにはあまり有益ではありません。17 個の mysql スレッドがありますが、top はこのモードでそのうちの 1 つしか表示できません。個々のスレッドを個別に表示するには、'-H' フラグをトップに (またはトップにいる間に 'H' キーボード コマンドを使用して) 使用する必要があります。これにより、各スレッドの個別のステータスが表示されます。

于 2012-10-02T19:34:44.917 に答える
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));
}
于 2012-08-15T10:58:28.250 に答える