可以使用 onstat -g spi 命令显示有关使用长自旋的自旋锁的信息。
服务器中的许多资源由两个或更多的线程访问。在一些访问(诸如更新共享值)中,服务器必须确保每次只有一个线程在访问该资源。spin lock 是用来为一些资源提供互斥存取的机制。有了这类锁,在第一次尝试时由于另一个线程占用锁而没有成功获取锁的线程重复尝试获取锁,直至成功为止。
自旋锁的成本很低,而且自旋锁通常用于在短期内获取互斥的资源。然而,如果自旋锁被高度使用,那么循环重试机可能会变得更贵。
onstat -g spi 命令对于帮助识别由于高度使用自旋锁而形成的性能瓶颈很有帮助。该选项列出了带有等待的自旋锁,在线程第一次尝试时没有成功为其获取锁而循环重试的自旋锁。
图: onstat -g spi 命令输出
Spin locks with waits: Num Waits Num Loops Avg Loop/Wait Name 114 117675 1032.24 lockfr3 87 256461 2947.83 fast mutex, lockhash[832] 1 11 11.00 fast mutex, 1:bhash[16668] 4 51831 12957.75 fast mutex, 1:lru-4 1 490 490.00 fast mutex, 1:bf[994850] 0xe00002 0x14eb32000