glocktop: Display or print active GFS2 locks.

Read glocktop man page on Linux: $ man 8 glocktop

NAME

glocktop - Display or print active GFS2 locks.

SYNOPSIS

glocktop

[OPTIONS]

DESCRIPTION

The glocktop tool is used to display active GFS2 inter-node locks,
also known as glocks. Simply put, it's a tool to filter and interpret the
contents of the glocks debugfs file. The glocks debugfs file shows
all glocks known to GFS2, their holders, and technical data such as flags.
The glocktop tool will only show the glocks that are important: glocks that
are being held or for which there are waiters. It also interprets the debugfs
file of DLM (Distributed Lock Manager).

 

OPTIONS

-d <delay>
Specify a time delay (in seconds) between reports. (Default is 30 seconds)
-h
Print help information.
-i
Interactive mode. In this mode, glocktop acts more like the top command.
It shows the pertinent glocks on the terminal session (as many as it can
fit). The advantage is that it uses different colors to draw attention to
what's important. The disadvantage is that it's limited by the size of
your display, so you may not see all the glocks.
-D
Omit DLM status. This may be used to reduce the amount of output for
interactive mode.
-n <iterations>
End the program after the specified number of iterations (reports). The
default is to keep running until interrupted.
-r
Show resource group reservation information. Normally, glocktop omits
resource group reservation information to condense the output. This
information is only important when debugging information related to the
GFS2 block allocator and file system fragmentation.
-s <freq>
Print glock summary information every <freq> reports.
The glock summary information is bulky and often not needed, so it's
only printed once every 10 reports. You can eliminate it entirely from
the output by specifying a value of 0. If you want the statistics to
print after every report, specify freq as 1.
-t
Trace directory path. A lot of GFS2 glock performance problems are caused
by an application's contention for one or two directories. These show up
as regular inodes in the output, but there's no good way to tell from the
output which directory is contended. Ordinarily, glocktop won't try to
look up the full pathname of a contended directory because it's slow,
especially if there are millions of glocks. This option instructs glocktop
to try to determine the full directory path names when it can, so you can
tell the full path (within the mount point) of contended directories.
-H
Don't show Held glocks, unless there are also waiters for the lock.
Ordinarily, glocktop will show glocks that are held (but not iopen
glocks which are almost always held by the thousands) as well as glocks
for which there are waiters. If it only showed glocks with waiters, you
could see, for example, that a glock is being blocked on one node,
but you couldn't see the information for a different node currently
holding the lock and thus, blocking the waiter. This option forces glocktop to
stop printing information for glocks with no waiters (on that node).
The advantage is that the output is smaller and easier to look at.
The disadvantage is that you can't see information from the node that's
blocking the waiter, unless both waiter and holder are on the same node.

OUTPUT LINES

@ name
This is the GFS2 file system name for which the information is printed. It
also gives the time stamp of the report, and the cluster node name.
G:
This line represents a glock (internode GFS2 lock).

 G:  s:UN n:2/609b4 f:lIqob t:EX d:EX/0 a:0 v:0 r:3 m:200 (inode)
D:
This line gives you glocktop's interpretation of the glock's state as
far as DLM (distributed lock manager) is concerned.

  D: Granted PR on node 2 to pid 17511 [python]
H:
This line represents a glock holder: a process that's either holding the
glock, or is waiting to hold it. The value after S: represents how this
holder needs the lock: EX (Exclusive), SH (Shared), PR (Protected Read),
or UN (Unlocked). The value after F: indicates the holder flags: a W
indicates the holder is Waiting for the lock to be granted. An H indicates
the holder is currently holding the lock.

  H: s:EX f:W e:0 p:17511 [python] gfs2_unlink+0x7e/0x250 [gfs2]
U:
These lines represent glocktop's user interpretation of the data, both glock
and holder. Lines that begin with (N/A:...) can probably be ignored because
they ought to be unimportant: system files such as journals, etc.

  U:  W inode      183f5     Is:Shared, Want:Exclusive   [Demote pending, Reply pending, Queued, Blocking]

  U:  W  --->  waiting pid 17511 [python]  (Granted PR on node 2 to pid 17511 [python])
C:
These lines give you the call trace (call stack) of the process that's
either holding or waiting to hold the glock.
S
These lines give you the summary of all glocks for this file system: How many of
each category are unlocked, locked, how many are held in EX, SH, and DF, and how
many are waiting. G Waiting is how many glocks have waiters. P Waiting is
how many processes are waiting. Thus, you could have one glock that's got
ten processes waiting, or ten glocks that have ten processes waiting.

EXAMPLE OUTPUT

# glocktop

@ nate_bob1 Wed Jan 27 07:24:14 2016 @host-050
G: s:EX n:9/1 f:Iqb t:EX d:EX/0 a:0 v:0 r:2 m:200 (journal)
D: Granted EX on node 2 to pid 17468 [ended]
H: s:EX f:eH e:0 p:17468 [(ended)] gfs2_glock_nq_num+0x5b/0xa0 [gfs2]
U: (N/A:Journl) H journal 1 Held:Exclusive [Queued, Blocking]
U: (N/A:Journl) H ---> held by pid 17468 [(ended)] (Granted EX on node 2 to pid 17468 [ended])
G: s:SH n:1/1 f:Iqb t:SH d:EX/0 a:0 v:0 r:2 m:200 (non-disk)
D: Granted PR on node 2 to pid 17468 [ended]
H: s:SH f:eEH e:0 p:17468 [(ended)] gfs2_glock_nq_num+0x5b/0xa0 [gfs2]
U: (N/A:Not EX) H non-disk 1 Held:Shared [Queued, Blocking]
U: (N/A:Not EX) H ---> held by pid 17468 [(ended)] (Granted PR on node 2 to pid 17468 [ended])
G: s:EX n:2/181ec f:yIqob t:EX d:EX/0 a:1 v:0 r:3 m:200 (inode)
D: Granted EX on this node to pid 17468 [ended]
H: s:EX f:H e:0 p:17468 [(ended)] init_per_node+0x17d/0x280 [gfs2]
I: n:12/98796 t:8 f:0x00 d:0x00000201 s:24
U: (N/A:System) H inode 181ec Held:Exclusive [Dirty, Queued, Blocking]
U: (N/A:System) H ---> held by pid 17468 [(ended)] (Granted EX on this node to pid 17468 [ended])
G: s:EX n:2/181ed f:Iqob t:EX d:EX/0 a:0 v:0 r:3 m:200 (inode)
D: Granted EX on this node to pid 17468 [ended]
H: s:EX f:H e:0 p:17468 [(ended)] init_per_node+0x1b0/0x280 [gfs2]
I: n:13/98797 t:8 f:0x00 d:0x00000200 s:1048576
U: (N/A:System) H inode 181ed Held:Exclusive [Queued, Blocking]
U: (N/A:System) H ---> held by pid 17468 [(ended)] (Granted EX on this node to pid 17468 [ended])
G: s:SH n:2/183f5 f:ldrIqob t:EX d:UN/0 a:0 v:0 r:5 m:10 (inode)
D: Granted PR on node 2 to pid 17511 [python]
H: s:EX f:W e:0 p:17511 [python] gfs2_unlink+0x7e/0x250 [gfs2]
I: n:1/99317 t:4 f:0x00 d:0x00000003 s:2048
U: W inode 183f5 Is:Shared, Want:Exclusive [Demote pending, Reply pending, Queued, Blocking]
U: W ---> waiting pid 17511 [python] (Granted PR on node 2 to pid 17511 [python])
C: gfs2_unlink+0xdc/0x250 [gfs2]
C: vfs_unlink+0xa0/0xf0
C: do_unlinkat+0x163/0x260
C: sys_unlink+0x16/0x20
G: s:SH n:2/805b f:Iqob t:SH d:EX/0 a:0 v:0 r:3 m:200 (inode)
D: Granted PR on node 2 to pid 17468 [ended]
H: s:SH f:eEcH e:0 p:17468 [(ended)] init_journal+0x185/0x500 [gfs2]
I: n:5/32859 t:8 f:0x01 d:0x00000200 s:134217728
U: (N/A:Not EX) H inode 805b Held:Shared [Queued, Blocking]
U: (N/A:Not EX) H ---> held by pid 17468 [(ended)] (Granted PR on node 2 to pid 17468 [ended])
S glocks nondisk inode rgrp iopen flock quota jrnl Total
S --------- ------- -------- ------- ------- ------- ----- ---- --------
S Unlocked: 1 5 4 0 0 0 0 10
S Locked: 2 245 6 58 0 0 1 313
S Total: 3 250 10 58 0 0 1 323
S
S Held EX: 0 2 0 0 0 0 1 3
S Held SH: 1 1 0 57 0 0 0 59
S Held DF: 0 0 0 0 0 0 0 0
S G Waiting: 0 1 0 0 0 0 0 1
S P Waiting: 0 1 0 0 0 0 0 1
S DLM wait: 0

@ nate_bob0 Wed Jan 27 07:24:14 2016 @host-050
G: s:EX n:2/180e9 f:yIqob t:EX d:EX/0 a:1 v:0 r:3 m:200 (inode)
D: Granted EX on this node to pid 17465 [ended]
H: s:EX f:H e:0 p:17465 [(ended)] init_per_node+0x17d/0x280 [gfs2]
I: n:9/98537 t:8 f:0x00 d:0x00000201 s:24
U: (N/A:System) H inode 180e9 Held:Exclusive [Dirty, Queued, Blocking]
U: (N/A:System) H ---> held by pid 17465 [(ended)] (Granted EX on this node to pid 17465 [ended])
G: s:UN n:2/609b4 f:lIqob t:EX d:EX/0 a:0 v:0 r:3 m:200 (inode)
D: Granted EX on node 2 to pid 14367 [ended]
H: s:EX f:W e:0 p:16297 [delete_workqueu] gfs2_delete_inode+0x9d/0x450 [gfs2]
U: W inode 609b4 Is:Unlocked, Want:Exclusive [Queued, Blocking]
U: W ---> waiting pid 16297 [delete_workqueu] (Granted EX on node 2 to pid 14367 [ended])
C: gfs2_delete_inode+0xa5/0x450 [gfs2]
C: generic_delete_inode+0xde/0x1d0
C: generic_drop_inode+0x65/0x80
C: gfs2_drop_inode+0x37/0x40 [gfs2]
G: s:SH n:2/19 f:Iqob t:SH d:EX/0 a:0 v:0 r:3 m:200 (inode)
D: Granted PR on this node to pid 17465 [ended]
H: s:SH f:eEcH e:0 p:17465 [(ended)] init_journal+0x185/0x500 [gfs2]
I: n:4/25 t:8 f:0x01 d:0x00000200 s:134217728
U: (N/A:Not EX) H inode 19 Held:Shared [Queued, Blocking]
U: (N/A:Not EX) H ---> held by pid 17465 [(ended)] (Granted PR on this node to pid 17465 [ended])
G: s:EX n:2/180ea f:Iqob t:EX d:EX/0 a:0 v:0 r:3 m:200 (inode)
D: Granted EX on this node to pid 17465 [ended]
H: s:EX f:H e:0 p:17465 [(ended)] init_per_node+0x1b0/0x280 [gfs2]
I: n:10/98538 t:8 f:0x00 d:0x00000200 s:1048576
U: (N/A:System) H inode 180ea Held:Exclusive [Queued, Blocking]
U: (N/A:System) H ---> held by pid 17465 [(ended)] (Granted EX on this node to pid 17465 [ended])
G: s:EX n:9/0 f:Iqb t:EX d:EX/0 a:0 v:0 r:2 m:200 (journal)
D: Granted EX on this node to pid 17465 [ended]
H: s:EX f:eH e:0 p:17465 [(ended)] gfs2_glock_nq_num+0x5b/0xa0 [gfs2]
U: (N/A:Journl) H journal 0 Held:Exclusive [Queued, Blocking]
U: (N/A:Journl) H ---> held by pid 17465 [(ended)] (Granted EX on this node to pid 17465 [ended])
G: s:UN n:2/4fe12 f:ldIqob t:EX d:UN/0 a:0 v:0 r:4 m:10 (inode)
H: s:EX f:W e:0 p:17523 [python] gfs2_rename+0x344/0x8b0 [gfs2]
H: s:SH f:AW e:0 p:17527 [python] gfs2_permission+0x176/0x210 [gfs2]
U: W inode 4fe12 Is:Unlocked, Want:Exclusive [Demote pending, Queued, Blocking]
U: W ---> waiting pid 17523 [python]
C: gfs2_permission+0x17f/0x210 [gfs2]
C: __link_path_walk+0xb3/0x1000
C: path_walk+0x6a/0xe0
C: filename_lookup+0x6b/0xc0
U: W ---> waiting pid 17527 [python]
C: do_unlinkat+0x107/0x260
C: sys_unlink+0x16/0x20
C: system_call_fastpath+0x16/0x1b
C: 0xffffffffffffffff
G: s:SH n:1/1 f:Iqb t:SH d:EX/0 a:0 v:0 r:2 m:200 (non-disk)
D: Granted PR on node 2 to pid 14285 [ended]
D: Granted PR on this node to pid 17465 [ended]
H: s:SH f:eEH e:0 p:17465 [(ended)] gfs2_glock_nq_num+0x5b/0xa0 [gfs2]
U: (N/A:Not EX) H non-disk 1 Held:Shared [Queued, Blocking]
U: (N/A:Not EX) H ---> held by pid 17465 [(ended)] (Granted PR on node 2 to pid 14285 [ended]) (Granted PR on this node to pid 17465 [ended])
S glocks nondisk inode rgrp iopen flock quota jrnl Total
S --------- ------- -------- ------- ------- ------- ----- ---- --------
S Unlocked: 1 8 7 0 0 0 0 16
S Locked: 2 208 3 41 0 0 1 256
S Total: 3 216 10 41 0 0 1 272
S
S Held EX: 0 2 0 0 0 0 1 3
S Held SH: 1 1 0 41 0 0 0 43
S Held DF: 0 0 0 0 0 0 0 0
S G Waiting: 0 2 0 0 0 0 0 2
S P Waiting: 0 3 0 0 0 0 0 3
S DLM wait: 0

From this example output, we can see there are two GFS2 file systems mounted on system host-050: nate_bob1 and nate_bob0. In nate_bob1, we can see six glocks, but we can ignore all of them marked (N/A:...) because they are system files or held in SHared mode, and therefore other nodes should be able to hold the lock in SHared as well.

There is one glock, for inode 183f5, which is has a process waiting to hold it. The lock is currently in SHared mode (s:SH on the G: line) but process 17511 (python) wants to hold the lock in EXclusive mode (S:EX on the H: line). That process has a call stack that indicates it is trying to hold the glock from gfs2_unlink. The DLM says the lock is currently granted on node 2 in PR (Protected Read) mode.

For file system nate_bob0, there are 7 glocks listed. All but two are uninteresting. Locks 2/609b4 and 2/4fe12 have processes waiting to hold them.

In the summary data for nate_bob0, you can see there are 3 processes waiting for 2 inode glocks (so one of those glocks has multiple processes waiting).

Since DLM wait is 0 in the summary data for both GFS2 mount points, nobody is waiting for DLM to grant the lock.

KNOWN BUGS AND LIMITATIONS

Since the GFS2 debugfs files are completely separate from the DLM debugfs files, and locks can change status in a few nanoseconds time, there will always be a lag between the GFS2 view of a lock and the DLM view of a lock. If there is some kind of long-term hang, they are more likely to match. However, under ordinary conditions, by the time glocktop gets around to fetching the DLM status of a lock, the information has changed. Therefore, don't be surprised if the DLM's view of a lock is at odds with its glock.

Since iopen glocks are held by the thousands, glocktop skips most of the information related to them unless there's a waiter. For that reason, iopen lock problems may be difficult to debug with glocktop.

It doesn't handle very large numbers (millions) of glocks.

glocktop的更多相关文章

随机推荐

  1. 事务(JDBC、Spring)

    如果不用spring管理事务,我们自己写代码来操作事务.那么这个代码怎么写要看底层怎么访问数据库了. 当采用原生JDBC访问数据库时,操作事务需要使用java.sql.Connection的API.开 ...

  2. Mybatis学习笔记14 - 动态sql之foreach标签

    一.查询给定集合中员工id对应的所有员工信息 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import ...

  3. Python + Selenium 基础篇 - 打开和关闭浏览器

    1.首先要下载浏览器对应的driver,并放到你的python安装目录 Chrome浏览器(chromedriver): http://npm.taobao.org/mirrors/chromedri ...

  4. angularjs string format

    用惯了C#的string.format,在angularjs中还不太习惯字符串的拼接,还好可以自定义String.Format String.format = function() { ) retur ...

  5. SecureCRT中文乱码解决方案

    SecureCRT是一个商业终端连接工具.SecureCRT可以自定义界面颜色方案,可以连接SSH1与SSH2.Telnet等服务.默认设置下,通过SecureCRT连接SSH服务器可能出现中文乱码的 ...

  6. windows2008利用serv-u14.0.0.6架设FTP服务器的方法

    这几天在公司的服务器上安装serv-u,想把它做成可以传输文件的ftp服务器,结果遇到了很多问题,试了serv-u的好几个版本,结果都不行,最终只有serv-u14安装成功. 安装过程很简单,安装后除 ...

  7. DEDE日期调用小插件

    在日期文本框里面,点击的时候,下面出来一个和万年历一样的日期选择表,在dede里面,有一个现成的js小插件,直接调用就OK了... <input type="text" on ...

  8. 文件选择之OpenFileDialog控件

    OpenFileDialog控件主要用于选择要打开的文件,在使用时可以在属性面变中设置属性,也可在代码中设置其属性 OpenFileDialog控件的属性 InitialDirectory 对话框的初 ...

  9. js 浮点数计算Bug

    之前在写项目时候,直接对带小数点的数据进行运算,发现所得到的值并不是自己想要的. 经过一系列学习后,发现在JavaScript中,浮点数运算都是先转换成二进制,在转成二进制的时候有出现无限循环小数,故 ...

  10. java技术小白的入门

    一.入门书籍 1,疯狂java讲义 2,java编程思想 3,Maven权威指南 4,Spring 3.0就是这么简单 5,Spring技术内幕 6,Spring实战 7,Maven实战 二.入门业务 ...