Linux iad1-shared-b7-18 6.6.49-grsec-jammy+ #10 SMP Thu Sep 12 23:23:08 UTC 2024 x86_64
Apache
: 67.205.6.31 | : 216.73.216.47
Cant Read [ /etc/named.conf ]
8.2.29
fernandoquevedo
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
usr /
sbin /
[ HOME SHELL ]
Name
Size
Permission
Action
a2disconf
15.89
KB
-rwxr-xr-x
a2dismod
15.89
KB
-rwxr-xr-x
a2dissite
15.89
KB
-rwxr-xr-x
a2enconf
15.89
KB
-rwxr-xr-x
a2enmod
15.89
KB
-rwxr-xr-x
a2ensite
15.89
KB
-rwxr-xr-x
a2query
9.64
KB
-rwxr-xr-x
aa-remove-unknown
3
KB
-rwxr-xr-x
aa-status
62.62
KB
-rwxr-xr-x
aa-teardown
137
B
-rwxr-xr-x
accessdb
14.55
KB
-rwxr-xr-x
accton
14.41
KB
-rwxr-xr-x
add-shell
1.03
KB
-rwxr-xr-x
addgnupghome
3
KB
-rwxr-xr-x
addgroup
37.35
KB
-rwxr-xr-x
adduser
37.35
KB
-rwxr-xr-x
agetty
55.56
KB
-rwxr-xr-x
apache2
740.89
KB
-rwxr-xr-x
apache2ctl
7.06
KB
-rwxr-xr-x
apachectl
7.06
KB
-rwxr-xr-x
apparmor_parser
1.48
MB
-rwxr-xr-x
apparmor_status
62.62
KB
-rwxr-xr-x
applygnupgdefaults
2.17
KB
-rwxr-xr-x
arp
61.61
KB
-rwxr-xr-x
arpd
26.33
KB
-rwxr-xr-x
arping
42.2
KB
-rwxr-xr-x
arptables
219.04
KB
-rwxr-xr-x
arptables-nft
219.04
KB
-rwxr-xr-x
arptables-nft-restore
219.04
KB
-rwxr-xr-x
arptables-nft-save
219.04
KB
-rwxr-xr-x
arptables-restore
219.04
KB
-rwxr-xr-x
arptables-save
219.04
KB
-rwxr-xr-x
aspell-autobuildhash
13.4
KB
-rwxr-xr-x
atd
30.16
KB
-rwxr-xr-x
auth-otp
18.54
KB
-rwxr-xr-x
badblocks
34.32
KB
-rwxr-xr-x
bcache-super-show
14.3
KB
-rwxr-xr-x
biosdecode
23.2
KB
-rwxr-xr-x
blkdeactivate
15.97
KB
-rwxr-xr-x
blkdiscard
22.38
KB
-rwxr-xr-x
blkid
50.41
KB
-rwxr-xr-x
blkmapd
38.3
KB
-rwxr-xr-x
blkzone
34.38
KB
-rwxr-xr-x
blockdev
30.38
KB
-rwxr-xr-x
bridge
92.49
KB
-rwxr-xr-x
cache_check
1.33
MB
-rwxr-xr-x
cache_dump
1.33
MB
-rwxr-xr-x
cache_metadata_size
1.33
MB
-rwxr-xr-x
cache_repair
1.33
MB
-rwxr-xr-x
cache_restore
1.33
MB
-rwxr-xr-x
cache_writeback
1.33
MB
-rwxr-xr-x
cachefilesd
34.29
KB
-rwxr-xr-x
capsh
30.3
KB
-rwxr-xr-x
cfdisk
94.73
KB
-rwxr-xr-x
cgclear
14.3
KB
-rwxr-xr-x
cgconfigparser
14.6
KB
-rwxr-xr-x
cgdisk
150.48
KB
-rwxr-xr-x
cgrulesengd
30.67
KB
-rwxr-xr-x
chcpu
30.38
KB
-rwxr-xr-x
check_forensic
952
B
-rwxr-xr-x
chgpasswd
58.13
KB
-rwxr-xr-x
chmem
34.38
KB
-rwxr-xr-x
chpasswd
54.16
KB
-rwxr-xr-x
chroot
38.51
KB
-rwxr-xr-x
courierlogger
22.63
KB
-rwxr-xr-x
cpgr
48.29
KB
-rwxr-xr-x
cppw
48.29
KB
-rwxr-xr-x
cron
50.58
KB
-rwxr-xr-x
cryptdisks_start
1.51
KB
-rwxr-xr-x
cryptdisks_stop
844
B
-rwxr-xr-x
cryptsetup
169.55
KB
-rwxr-xr-x
cryptsetup-reencrypt
90.38
KB
-rwxr-xr-x
cryptsetup-ssh
23.53
KB
-rwxr-xr-x
ctrlaltdel
14.38
KB
-rwxr-xr-x
dcb
80.52
KB
-rwxr-xr-x
debugfs
229.8
KB
-rwxr-xr-x
delgroup
16.11
KB
-rwxr-xr-x
deliverquota
38.23
KB
-rwxr-xr-x
deliverquota.maildrop
38.23
KB
-rwxr-xr-x
deluser
16.11
KB
-rwxr-xr-x
depmod
166.36
KB
-rwxr-xr-x
devlink
142.86
KB
-rwxr-xr-x
dhclient
442.66
KB
-rwxr-xr-x
dhclient-script
15.92
KB
-rwxr-xr-x
dkms
140.76
KB
-rwxr-xr-x
dmeventd
50.38
KB
-rwxr-xr-x
dmidecode
122.98
KB
-rwxr-xr-x
dmsetup
171.02
KB
-rwxr-xr-x
dmstats
171.02
KB
-rwxr-xr-x
dosfsck
82.38
KB
-rwxr-xr-x
dosfslabel
38.38
KB
-rwxr-xr-x
dpkg-preconfigure
3.58
KB
-rwxr-xr-x
dpkg-reconfigure
4.38
KB
-rwxr-xr-x
dump-acct
22.56
KB
-rwxr-xr-x
dump-utmp
14.47
KB
-rwxr-xr-x
dumpe2fs
30.31
KB
-rwxr-xr-x
e2freefrag
14.3
KB
-rwxr-xr-x
e2fsck
351.84
KB
-rwxr-xr-x
e2image
42.31
KB
-rwxr-xr-x
e2label
102.55
KB
-rwxr-xr-x
e2mmpstatus
30.31
KB
-rwxr-xr-x
e2scrub
7.13
KB
-rwxr-xr-x
e2scrub_all
5.27
KB
-rwxr-xr-x
e2undo
22.3
KB
-rwxr-xr-x
e4crypt
30.38
KB
-rwxr-xr-x
e4defrag
30.3
KB
-rwxr-xr-x
ebtables
219.04
KB
-rwxr-xr-x
ebtables-nft
219.04
KB
-rwxr-xr-x
ebtables-nft-restore
219.04
KB
-rwxr-xr-x
ebtables-nft-save
219.04
KB
-rwxr-xr-x
ebtables-restore
219.04
KB
-rwxr-xr-x
ebtables-save
219.04
KB
-rwxr-xr-x
era_check
1.33
MB
-rwxr-xr-x
era_dump
1.33
MB
-rwxr-xr-x
era_invalidate
1.33
MB
-rwxr-xr-x
era_restore
1.33
MB
-rwxr-xr-x
escapesrc
22.45
KB
-rwxr-xr-x
ethtool
551.48
KB
-rwxr-xr-x
faillock
14.15
KB
-rwxr-xr-x
fatlabel
38.38
KB
-rwxr-xr-x
fdisk
110.42
KB
-rwxr-xr-x
filefrag
18.32
KB
-rwxr-xr-x
findfs
14.38
KB
-rwxr-xr-x
fixparts
58.48
KB
-rwxr-xr-x
fsadm
23.94
KB
-rwxr-xr-x
fsck
42.42
KB
-rwxr-xr-x
fsck.btrfs
1.16
KB
-rwxr-xr-x
fsck.cramfs
30.44
KB
-rwxr-xr-x
fsck.ext2
351.84
KB
-rwxr-xr-x
fsck.ext3
351.84
KB
-rwxr-xr-x
fsck.ext4
351.84
KB
-rwxr-xr-x
fsck.fat
82.38
KB
-rwxr-xr-x
fsck.minix
54.41
KB
-rwxr-xr-x
fsck.msdos
82.38
KB
-rwxr-xr-x
fsck.vfat
82.38
KB
-rwxr-xr-x
fsck.xfs
1.89
KB
-rwxr-xr-x
fsfreeze
14.38
KB
-rwxr-xr-x
fstab-decode
18.3
KB
-rwxr-xr-x
fstrim
42.38
KB
-rwxr-xr-x
ftpasswd
37.11
KB
-rwxr-xr-x
ftpmail
13.63
KB
-rwxr-xr-x
ftpquota
32.2
KB
-rwxr-xr-x
ftpscrub
23.66
KB
-rwxr-xr-x
ftpshut
14.3
KB
-rwxr-xr-x
ftpstats
12.16
KB
-rwxr-xr-x
gdisk
174.48
KB
-rwxr-xr-x
genccode
14.73
KB
-rwxr-xr-x
gencmn
14.73
KB
-rwxr-xr-x
genl
90.44
KB
-rwxr-xr-x
gennorm2
62.9
KB
-rwxr-xr-x
gensprep
26.8
KB
-rwxr-xr-x
getcap
14.3
KB
-rwxr-xr-x
getpcaps
14.3
KB
-rwxr-xr-x
getty
55.56
KB
-rwxr-xr-x
gradm2
2.6
MB
-rwxr-xr-x
gradm_pam
14.15
KB
-rwxr-xr-x
grlearn
210.38
KB
-rwxr-xr-x
groupadd
66.91
KB
-rwxr-xr-x
groupdel
62.73
KB
-rwxr-xr-x
groupmems
54.19
KB
-rwxr-xr-x
groupmod
66.82
KB
-rwxr-xr-x
grpck
58.13
KB
-rwxr-xr-x
grpconv
50.01
KB
-rwxr-xr-x
grpunconv
50.01
KB
-rwxr-xr-x
grub-bios-setup
941.42
KB
-rwxr-xr-x
grub-install
1.15
MB
-rwxr-xr-x
grub-macbless
929.11
KB
-rwxr-xr-x
grub-mkconfig
8.6
KB
-rwxr-xr-x
grub-mkdevicemap
215.7
KB
-rwxr-xr-x
grub-probe
941.36
KB
-rwxr-xr-x
grub-reboot
4.73
KB
-rwxr-xr-x
grub-set-default
3.47
KB
-rwxr-xr-x
halt
1.06
MB
-rwxr-xr-x
hdparm
139.43
KB
-rwxr-xr-x
httxt2dbm
14.3
KB
-rwxr-xr-x
hwclock
50.5
KB
-rwxr-xr-x
icmpinfo
18.57
KB
-rwxr-xr-x
iconvconfig
30.4
KB
-rwxr-xr-x
icupkg
23.1
KB
-rwxr-xr-x
ifconfig
77.17
KB
-rwxr-xr-x
ifdown
93.55
KB
-rwxr-xr-x
ifenslave
3.44
KB
-rwxr-xr-x
ifenslave-2.6
3.44
KB
-rwxr-xr-x
ifquery
93.55
KB
-rwxr-xr-x
iftop
66.8
KB
-rwxr-xr-x
ifup
93.55
KB
-rwxr-xr-x
in.proftpd
1.17
MB
-rwxr-xr-x
init
1.76
MB
-rwxr-xr-x
insmod
166.36
KB
-rwxr-xr-x
install-sgmlcatalog
4.44
KB
-rwxr-xr-x
installkernel
2.6
KB
-rwxr-xr-x
integritysetup
54.07
KB
-rwxr-xr-x
invoke-rc.d
16.12
KB
-rwxr-xr-x
iotop
496
B
-rwxr-xr-x
iotop-py
496
B
-rwxr-xr-x
ip
702.05
KB
-rwxr-xr-x
ip6tables
219.04
KB
-rwxr-xr-x
ip6tables-apply
6.89
KB
-rwxr-xr-x
ip6tables-legacy
96.95
KB
-rwxr-xr-x
ip6tables-legacy-restore
96.95
KB
-rwxr-xr-x
ip6tables-legacy-save
96.95
KB
-rwxr-xr-x
ip6tables-nft
219.04
KB
-rwxr-xr-x
ip6tables-nft-restore
219.04
KB
-rwxr-xr-x
ip6tables-nft-save
219.04
KB
-rwxr-xr-x
ip6tables-restore
219.04
KB
-rwxr-xr-x
ip6tables-restore-translate
219.04
KB
-rwxr-xr-x
ip6tables-save
219.04
KB
-rwxr-xr-x
ip6tables-translate
219.04
KB
-rwxr-xr-x
ipmaddr
18.3
KB
-rwxr-xr-x
ipmievd
207.3
KB
-rwxr-xr-x
ipset
14.15
KB
-rwxr-xr-x
ipset-translate
14.15
KB
-rwxr-xr-x
iptables
219.04
KB
-rwxr-xr-x
iptables-apply
6.89
KB
-rwxr-xr-x
iptables-legacy
96.95
KB
-rwxr-xr-x
iptables-legacy-restore
96.95
KB
-rwxr-xr-x
iptables-legacy-save
96.95
KB
-rwxr-xr-x
iptables-nft
219.04
KB
-rwxr-xr-x
iptables-nft-restore
219.04
KB
-rwxr-xr-x
iptables-nft-save
219.04
KB
-rwxr-xr-x
iptables-restore
219.04
KB
-rwxr-xr-x
iptables-restore-translate
219.04
KB
-rwxr-xr-x
iptables-save
219.04
KB
-rwxr-xr-x
iptables-translate
219.04
KB
-rwxr-xr-x
iptraf
191
KB
-rwxr-xr-x
iptraf-ng
191
KB
-rwxr-xr-x
iptunnel
18.3
KB
-rwxr-xr-x
ircflush
14.3
KB
-rwxr-xr-x
ircio
14.3
KB
-rwxr-xr-x
irqbalance
66.86
KB
-rwxr-xr-x
irqbalance-ui
34.38
KB
-rwxr-xr-x
iscsi-iname
14.3
KB
-rwxr-xr-x
iscsi_discovery
5.17
KB
-rwxr-xr-x
iscsiadm
398.46
KB
-rwxr-xr-x
iscsid
298.55
KB
-rwxr-xr-x
iscsistart
278.56
KB
-rwxr-xr-x
isosize
14.38
KB
-rwxr-xr-x
ispell-autobuildhash
15.56
KB
-rwxr-xr-x
iucode-tool
58.34
KB
-rwxr-xr-x
iucode_tool
58.34
KB
-rwxr-xr-x
kbdrate
18.16
KB
-rwxr-xr-x
key.dns_resolver
30.39
KB
-rwxr-xr-x
killall5
30.38
KB
-rwxr-xr-x
kpartx
46.16
KB
-rwxr-xr-x
ldattach
26.38
KB
-rwxr-xr-x
ldconfig
387
B
-rwxr-xr-x
ldconfig.real
1.16
MB
-rwxr-xr-x
locale-gen
4.29
KB
-rwxr-xr-x
logrotate
102.24
KB
-rwxr-xr-x
logsave
14.16
KB
-rwxr-xr-x
losetup
70.52
KB
-rwxr-xr-x
lsmod
166.36
KB
-rwxr-xr-x
luksformat
3.32
KB
-rwxr-xr-x
lvchange
2.89
MB
-rwxr-xr-x
lvconvert
2.89
MB
-rwxr-xr-x
lvcreate
2.89
MB
-rwxr-xr-x
lvdisplay
2.89
MB
-rwxr-xr-x
lvextend
2.89
MB
-rwxr-xr-x
lvm
2.89
MB
-rwxr-xr-x
lvmconfig
2.89
MB
-rwxr-xr-x
lvmdiskscan
2.89
MB
-rwxr-xr-x
lvmdump
10.07
KB
-rwxr-xr-x
lvmpolld
236.2
KB
-rwxr-xr-x
lvmsadc
2.89
MB
-rwxr-xr-x
lvmsar
2.89
MB
-rwxr-xr-x
lvreduce
2.89
MB
-rwxr-xr-x
lvremove
2.89
MB
-rwxr-xr-x
lvrename
2.89
MB
-rwxr-xr-x
lvresize
2.89
MB
-rwxr-xr-x
lvs
2.89
MB
-rwxr-xr-x
lvscan
2.89
MB
-rwxr-xr-x
make-bcache
22.38
KB
-rwxr-xr-x
make-ssl-cert
6.65
KB
-rwxr-xr-x
mdadm
601.31
KB
-rwxr-xr-x
mdmon
258.44
KB
-rwxr-xr-x
megacli
2.58
MB
-rwxr-xr-x
mii-tool
26.73
KB
-rwxr-xr-x
mk-runscript
2.75
KB
-rwxr-xr-x
mkdosfs
50.83
KB
-rwxr-xr-x
mke2fs
130.62
KB
-rwxr-xr-x
mkfs
14.38
KB
-rwxr-xr-x
mkfs.bfs
22.38
KB
-rwxr-xr-x
mkfs.btrfs
471.25
KB
-rwxr-xr-x
mkfs.cramfs
34.32
KB
-rwxr-xr-x
mkfs.ext2
130.62
KB
-rwxr-xr-x
mkfs.ext3
130.62
KB
-rwxr-xr-x
mkfs.ext4
130.62
KB
-rwxr-xr-x
mkfs.fat
50.83
KB
-rwxr-xr-x
mkfs.minix
42.39
KB
-rwxr-xr-x
mkfs.msdos
50.83
KB
-rwxr-xr-x
mkfs.ntfs
70.38
KB
-rwxr-xr-x
mkfs.vfat
50.83
KB
-rwxr-xr-x
mkfs.xfs
382.77
KB
-rwxr-xr-x
mkhomedir_helper
22.17
KB
-rwxr-xr-x
mkinitramfs
12.16
KB
-rwxr-xr-x
mklost+found
14.3
KB
-rwxr-xr-x
mkntfs
70.38
KB
-rwxr-xr-x
mkswap
46.38
KB
-rwxr-xr-x
modinfo
166.36
KB
-rwxr-xr-x
modprobe
166.36
KB
-rwxr-xr-x
mount.fuse
18.3
KB
-rwxr-xr-x
mount.fuse3
18.3
KB
-rwxr-xr-x
mount.lowntfs-3g
114.98
KB
-rwxr-xr-x
mount.nfs
98.68
KB
-rwsr-xr-x
mount.nfs4
98.68
KB
-rwsr-xr-x
mount.ntfs
159.01
KB
-rwxr-xr-x
mount.ntfs-3g
159.01
KB
-rwxr-xr-x
mountstats
42.28
KB
-rwxr-xr-x
mpathpersist
31.05
KB
-rwxr-xr-x
mpt-status
18.07
KB
-rwxr-xr-x
multipath
34.15
KB
-rwxr-xr-x
multipathd
134.26
KB
-rwxr-xr-x
nameif
14.48
KB
-rwxr-xr-x
needrestart
38.73
KB
-rwxr-xr-x
netplan
798
B
-rwxr-xr-x
newusers
74.73
KB
-rwxr-xr-x
nfnl_osf
18.3
KB
-rwxr-xr-x
nfsconf
38.67
KB
-rwxr-xr-x
nfsidmap
22.31
KB
-rwxr-xr-x
nfsiostat
24.41
KB
-rwxr-xr-x
nfsstat
37.29
KB
-rwxr-xr-x
nft
26.23
KB
-rwxr-xr-x
nginx
1.48
MB
-rwxr-xr-x
nologin
14.3
KB
-rwxr-xr-x
ntfsclone
50.38
KB
-rwxr-xr-x
ntfscp
34.38
KB
-rwxr-xr-x
ntfslabel
22.38
KB
-rwxr-xr-x
ntfsresize
62.39
KB
-rwxr-xr-x
ntfsundelete
50.38
KB
-rwxr-xr-x
ntp-keygen
81.84
KB
-rwxr-xr-x
ntp-wait
3.12
KB
-rwxr-xr-x
ntpd
859.07
KB
-rwxr-xr-x
ntpdate
83.27
KB
-rwxr-xr-x
ntpdate-debian
534
B
-rwxr-xr-x
ntptime
22.26
KB
-rwxr-xr-x
on_ac_power
3.7
KB
-rwxr-xr-x
overlayroot-chroot
2.45
KB
-rwxr-xr-x
ownership
14.45
KB
-rwxr-xr-x
pam-auth-update
20.5
KB
-rwxr-xr-x
pam_extrausers_chkpwd
22.15
KB
-rwxr-sr-x
pam_extrausers_update
30.15
KB
-rwxr-xr-x
pam_getenv
2.82
KB
-rwxr-xr-x
pam_timestamp_check
14.15
KB
-rwxr-xr-x
paperconfig
4.07
KB
-rwxr-xr-x
parted
86.4
KB
-rwxr-xr-x
partprobe
14.38
KB
-rwxr-xr-x
passenger-memory-stats
6.95
KB
-rwxr-xr-x
passenger-status
11.16
KB
-rwxr-xr-x
paxctl
14.19
KB
-rwxr-xr-x
pdata_tools
1.33
MB
-rwxr-xr-x
phpdismod
7.11
KB
-rwxr-xr-x
phpenmod
7.11
KB
-rwxr-xr-x
phpquery
6.24
KB
-rwxr-xr-x
pivot_root
14.38
KB
-rwxr-xr-x
plipconfig
14.3
KB
-rwxr-xr-x
plymouthd
150.55
KB
-rwxr-xr-x
postalias
22.3
KB
-rwxr-xr-x
postcat
22.37
KB
-rwxr-xr-x
postconf
183.8
KB
-rwxr-xr-x
postdrop
22.42
KB
-r-xr-sr-x
postfix
18.38
KB
-rwxr-xr-x
postfix-add-filter
4.84
KB
-rwxr-xr-x
postfix-add-policy
3.77
KB
-rwxr-xr-x
postfix-collate
2.87
KB
-rwxr-xr-x
postkick
14.3
KB
-rwxr-xr-x
postlock
14.3
KB
-rwxr-xr-x
postlog
14.45
KB
-rwxr-xr-x
postmap
22.3
KB
-rwxr-xr-x
postmulti
30.69
KB
-rwxr-xr-x
postqueue
22.38
KB
-r-xr-sr-x
postsuper
30.59
KB
-rwxr-xr-x
posttls-finger
42.38
KB
-rwxr-xr-x
poweroff
1.06
MB
-rwxr-xr-x
proftpd
1.17
MB
-rwxr-xr-x
proftpd-gencert
1.64
KB
-rwxr-xr-x
pvchange
2.89
MB
-rwxr-xr-x
pvck
2.89
MB
-rwxr-xr-x
pvcreate
2.89
MB
-rwxr-xr-x
pvdisplay
2.89
MB
-rwxr-xr-x
pvmove
2.89
MB
-rwxr-xr-x
pvremove
2.89
MB
-rwxr-xr-x
pvresize
2.89
MB
-rwxr-xr-x
pvs
2.89
MB
-rwxr-xr-x
pvscan
2.89
MB
-rwxr-xr-x
pwck
50.13
KB
-rwxr-xr-x
pwconv
46.01
KB
-rwxr-xr-x
pwunconv
42.01
KB
-rwxr-xr-x
qmqp-sink
18.3
KB
-rwxr-xr-x
qmqp-source
22.31
KB
-rwxr-xr-x
qshape
12.55
KB
-rwxr-xr-x
rarp
32.33
KB
-rwxr-xr-x
readprofile
22.41
KB
-rwxr-xr-x
reboot
1.06
MB
-rwxr-xr-x
remove-default-ispell
2.86
KB
-rwxr-xr-x
remove-default-wordlist
2.86
KB
-rwxr-xr-x
remove-shell
1.07
KB
-rwxr-xr-x
request-key
26.31
KB
-rwxr-xr-x
rescan-scsi-bus
20.01
KB
-rwxr-xr-x
resize2fs
66.3
KB
-rwxr-xr-x
rmail
18.3
KB
-rwxr-xr-x
rmmod
166.36
KB
-rwxr-xr-x
rmt
58.57
KB
-rwxr-xr-x
rmt-tar
58.57
KB
-rwxr-xr-x
route
64.27
KB
-rwxr-xr-x
rpc.gssd
86.5
KB
-rwxr-xr-x
rpc.idmapd
46.48
KB
-rwxr-xr-x
rpc.statd
79.05
KB
-rwxr-xr-x
rpc.svcgssd
46.4
KB
-rwxr-xr-x
rpcbind
62.41
KB
-rwxr-xr-x
rpcdebug
18.38
KB
-rwxr-xr-x
rpcinfo
34.48
KB
-rwxr-xr-x
rsyslogd
767.19
KB
-rwxr-xr-x
rtacct
28.31
KB
-rwxr-xr-x
rtcwake
34.38
KB
-rwxr-xr-x
rtmon
90.39
KB
-rwxr-xr-x
runit
22.41
KB
-rwxr-xr-x
runlevel
1.06
MB
-rwxr-xr-x
runsvchdir
14.37
KB
-rwxr-xr-x
runuser
54.38
KB
-rwxr-xr-x
rush
133.52
KB
-rwsr-xr-x
sa
35.41
KB
-rwxr-xr-x
scsi-config
9.36
KB
-rwxr-xr-x
scsi-spin
15.38
KB
-rwxr-xr-x
scsidev
50.31
KB
-rwxr-xr-x
scsiformat
38.2
KB
-rwxr-xr-x
scsiinfo
30.24
KB
-rwxr-xr-x
select-default-ispell
3.23
KB
-rwxr-xr-x
select-default-wordlist
3.21
KB
-rwxr-xr-x
sendmail
30.45
KB
-rwxr-xr-x
service
8.88
KB
-rwxr-xr-x
setcap
14.3
KB
-rwxr-xr-x
setvesablank
14.23
KB
-rwxr-xr-x
setvtrgb
14.29
KB
-rwxr-xr-x
sfdisk
102.38
KB
-rwxr-xr-x
sgdisk
162.48
KB
-rwxr-xr-x
shadowconfig
885
B
-rwxr-xr-x
showmount
14.57
KB
-rwxr-xr-x
shutdown
1.06
MB
-rwxr-xr-x
slattach
36.08
KB
-rwxr-xr-x
slrn_getdescs
791
B
-rwxr-xr-x
sm-notify
50.48
KB
-rwxr-xr-x
smartctl
827.65
KB
-rwxr-xr-x
smartd
587.16
KB
-rwxr-xr-x
smtp-sink
35.27
KB
-rwxr-xr-x
smtp-source
30.32
KB
-rwxr-xr-x
split-logfile
2.36
KB
-rwxr-xr-x
sraw
10
KB
-rwxr-xr-x
sshd
899.7
KB
-rwxr-xr-x
start-statd
1023
B
-rwxr-xr-x
start-stop-daemon
47.35
KB
-rwxr-xr-x
sudo_logsrvd
200.1
KB
-rwxr-xr-x
sudo_sendlog
107.34
KB
-rwxr-xr-x
sulogin
42.38
KB
-rwxr-xr-x
swaplabel
18.38
KB
-rwxr-xr-x
swapoff
22.38
KB
-rwxr-xr-x
swapon
42.38
KB
-rwxr-xr-x
switch_root
22.38
KB
-rwxr-xr-x
sync-available
1.42
KB
-rwxr-xr-x
sysctl
30.23
KB
-rwxr-xr-x
tarcat
936
B
-rwxr-xr-x
tc
614.08
KB
-rwxr-xr-x
tcptraceroute
1.56
KB
-rwxr-xr-x
tcptraceroute.db
1.56
KB
-rwxr-xr-x
telinit
1.06
MB
-rwxr-xr-x
thermald
554.6
KB
-rwxr-xr-x
thin_check
1.33
MB
-rwxr-xr-x
thin_delta
1.33
MB
-rwxr-xr-x
thin_dump
1.33
MB
-rwxr-xr-x
thin_ls
1.33
MB
-rwxr-xr-x
thin_metadata_size
1.33
MB
-rwxr-xr-x
thin_repair
1.33
MB
-rwxr-xr-x
thin_restore
1.33
MB
-rwxr-xr-x
thin_rmap
1.33
MB
-rwxr-xr-x
thin_trim
1.33
MB
-rwxr-xr-x
tipc
90.44
KB
-rwxr-xr-x
tk_scsiformat
41.31
KB
-rwxr-xr-x
tmpreaper
30.61
KB
-rwxr-xr-x
traceroute
67.16
KB
-rwxr-xr-x
tune2fs
102.55
KB
-rwxr-xr-x
tzconfig
106
B
-rwxr-xr-x
ufw
4.82
KB
-rwxr-xr-x
umount.nfs
98.68
KB
-rwsr-xr-x
umount.nfs4
98.68
KB
-rwsr-xr-x
unix_chkpwd
26.15
KB
-rwxr-sr-x
unix_update
30.15
KB
-rwxr-xr-x
update-ca-certificates
5.29
KB
-rwxr-xr-x
update-catalog
9.15
KB
-rwxr-xr-x
update-default-aspell
1
KB
-rwxr-xr-x
update-default-ispell
9.68
KB
-rwxr-xr-x
update-default-wordlist
7.5
KB
-rwxr-xr-x
update-dictcommon-aspell
1
KB
-rwxr-xr-x
update-dictcommon-hunspell
782
B
-rwxr-xr-x
update-fmtutil
9.58
KB
-rwxr-xr-x
update-grub
64
B
-rwxr-xr-x
update-grub-gfxpayload
301
B
-rwxr-xr-x
update-grub2
64
B
-rwxr-xr-x
update-gsfontmap
470
B
-rwxr-xr-x
update-icon-caches
596
B
-rwxr-xr-x
update-info-dir
1.66
KB
-rwxr-xr-x
update-initramfs
6.74
KB
-rwxr-xr-x
update-java-alternatives
3.09
KB
-rwxr-xr-x
update-language
9.37
KB
-rwxr-xr-x
update-language-dat
9.37
KB
-rwxr-xr-x
update-language-def
9.37
KB
-rwxr-xr-x
update-language-lua
9.37
KB
-rwxr-xr-x
update-locale
2.99
KB
-rwxr-xr-x
update-mime
9.39
KB
-rwxr-xr-x
update-passwd
34.56
KB
-rwxr-xr-x
update-pciids
1.71
KB
-rwxr-xr-x
update-rc.d
16.92
KB
-rwxr-xr-x
update-secureboot-policy
7.43
KB
-rwxr-xr-x
update-service
4.47
KB
-rwxr-xr-x
update-shells
3.72
KB
-rwxr-xr-x
update-smart-drivedb
23.35
KB
-rwxr-xr-x
update-texmf
2.6
KB
-rwxr-xr-x
update-texmf-config
1.5
KB
-rwxr-xr-x
update-tl-stacked-conffile
9.58
KB
-rwxr-xr-x
update-updmap
9.58
KB
-rwxr-xr-x
update-xmlcatalog
16.88
KB
-rwxr-xr-x
upgrade-from-grub-legacy
1.56
KB
-rwxr-xr-x
usb_modeswitch
59.66
KB
-rwxr-xr-x
usb_modeswitch_dispatcher
26.78
KB
-rwxr-xr-x
usbmuxd
86.6
KB
-rwxr-xr-x
useradd
127.66
KB
-rwxr-xr-x
userdel
86.85
KB
-rwxr-xr-x
usermod
123.46
KB
-rwxr-xr-x
utmpset
18.34
KB
-rwxr-xr-x
uuidd
30.85
KB
-rwxr-xr-x
validlocale
1.73
KB
-rwxr-xr-x
vconfig
4.04
KB
-rwxr-xr-x
vcstime
14.15
KB
-rwxr-xr-x
vdpa
30.56
KB
-rwxr-xr-x
veritysetup
43.76
KB
-rwxr-xr-x
vgcfgbackup
2.89
MB
-rwxr-xr-x
vgcfgrestore
2.89
MB
-rwxr-xr-x
vgchange
2.89
MB
-rwxr-xr-x
vgck
2.89
MB
-rwxr-xr-x
vgconvert
2.89
MB
-rwxr-xr-x
vgcreate
2.89
MB
-rwxr-xr-x
vgdisplay
2.89
MB
-rwxr-xr-x
vgexport
2.89
MB
-rwxr-xr-x
vgextend
2.89
MB
-rwxr-xr-x
vgimport
2.89
MB
-rwxr-xr-x
vgimportclone
2.89
MB
-rwxr-xr-x
vgmerge
2.89
MB
-rwxr-xr-x
vgmknodes
2.89
MB
-rwxr-xr-x
vgreduce
2.89
MB
-rwxr-xr-x
vgremove
2.89
MB
-rwxr-xr-x
vgrename
2.89
MB
-rwxr-xr-x
vgs
2.89
MB
-rwxr-xr-x
vgscan
2.89
MB
-rwxr-xr-x
vgsplit
2.89
MB
-rwxr-xr-x
vigr
56.53
KB
-rwxr-xr-x
vipw
56.53
KB
-rwxr-xr-x
visudo
219.79
KB
-rwxr-xr-x
vpddecode
14.58
KB
-rwxr-xr-x
wipefs
38.38
KB
-rwxr-xr-x
wserv
14.3
KB
-rwxr-xr-x
xfs_admin
1.37
KB
-rwxr-xr-x
xfs_bmap
695
B
-rwxr-xr-x
xfs_copy
82.48
KB
-rwxr-xr-x
xfs_db
652.44
KB
-rwxr-xr-x
xfs_estimate
14.16
KB
-rwxr-xr-x
xfs_freeze
800
B
-rwxr-xr-x
xfs_fsr
42.18
KB
-rwxr-xr-x
xfs_growfs
38.28
KB
-rwxr-xr-x
xfs_info
1.26
KB
-rwxr-xr-x
xfs_io
199.55
KB
-rwxr-xr-x
xfs_logprint
78.33
KB
-rwxr-xr-x
xfs_mdrestore
26.17
KB
-rwxr-xr-x
xfs_metadump
782
B
-rwxr-xr-x
xfs_mkfile
1.02
KB
-rwxr-xr-x
xfs_ncheck
685
B
-rwxr-xr-x
xfs_quota
90.16
KB
-rwxr-xr-x
xfs_repair
599.38
KB
-rwxr-xr-x
xfs_rtcp
18.15
KB
-rwxr-xr-x
xfs_scrub
106.27
KB
-rwxr-xr-x
xfs_scrub_all
5.87
KB
-rwxr-xr-x
xfs_spaceman
42.3
KB
-rwxr-xr-x
xfsdump
273.03
KB
-rwxr-xr-x
xfsinvutil
71.29
KB
-rwxr-xr-x
xfsrestore
313.29
KB
-rwxr-xr-x
xtables-legacy-multi
96.95
KB
-rwxr-xr-x
xtables-monitor
219.04
KB
-rwxr-xr-x
xtables-nft-multi
219.04
KB
-rwxr-xr-x
zabbix_agentd
658.51
KB
-rwxr-xr-x
zerofree
14.15
KB
-rwxr-xr-x
zic
62.32
KB
-rwxr-xr-x
zramctl
54.52
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : nfsiostat
#!/usr/bin/python3 # -*- python-mode -*- """Emulate iostat for NFS mount points using /proc/self/mountstats """ from __future__ import print_function __copyright__ = """ Copyright (C) 2005, Chuck Lever <cel@netapp.com> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA """ import sys, os, time from optparse import OptionParser, OptionGroup Iostats_version = '0.2' def difference(x, y): """Used for a map() function """ return x - y NfsEventCounters = [ 'inoderevalidates', 'dentryrevalidates', 'datainvalidates', 'attrinvalidates', 'vfsopen', 'vfslookup', 'vfspermission', 'vfsupdatepage', 'vfsreadpage', 'vfsreadpages', 'vfswritepage', 'vfswritepages', 'vfsreaddir', 'vfssetattr', 'vfsflush', 'vfsfsync', 'vfslock', 'vfsrelease', 'congestionwait', 'setattrtrunc', 'extendwrite', 'sillyrenames', 'shortreads', 'shortwrites', 'delay' ] NfsByteCounters = [ 'normalreadbytes', 'normalwritebytes', 'directreadbytes', 'directwritebytes', 'serverreadbytes', 'serverwritebytes', 'readpages', 'writepages' ] class DeviceData: """DeviceData objects provide methods for parsing and displaying data for a single mount grabbed from /proc/self/mountstats """ def __init__(self): self.__nfs_data = dict() self.__rpc_data = dict() self.__rpc_data['ops'] = [] def __parse_nfs_line(self, words): if words[0] == 'device': self.__nfs_data['export'] = words[1] self.__nfs_data['mountpoint'] = words[4] self.__nfs_data['fstype'] = words[7] if words[7] == 'nfs': self.__nfs_data['statvers'] = words[8] elif 'nfs' in words or 'nfs4' in words: self.__nfs_data['export'] = words[0] self.__nfs_data['mountpoint'] = words[3] self.__nfs_data['fstype'] = words[6] if words[6] == 'nfs': self.__nfs_data['statvers'] = words[7] elif words[0] == 'age:': self.__nfs_data['age'] = int(words[1]) elif words[0] == 'opts:': self.__nfs_data['mountoptions'] = ''.join(words[1:]).split(',') elif words[0] == 'caps:': self.__nfs_data['servercapabilities'] = ''.join(words[1:]).split(',') elif words[0] == 'nfsv4:': self.__nfs_data['nfsv4flags'] = ''.join(words[1:]).split(',') elif words[0] == 'sec:': keys = ''.join(words[1:]).split(',') self.__nfs_data['flavor'] = int(keys[0].split('=')[1]) self.__nfs_data['pseudoflavor'] = 0 if self.__nfs_data['flavor'] == 6: self.__nfs_data['pseudoflavor'] = int(keys[1].split('=')[1]) elif words[0] == 'events:': i = 1 for key in NfsEventCounters: self.__nfs_data[key] = int(words[i]) i += 1 elif words[0] == 'bytes:': i = 1 for key in NfsByteCounters: self.__nfs_data[key] = int(words[i]) i += 1 def __parse_rpc_line(self, words): if words[0] == 'RPC': self.__rpc_data['statsvers'] = float(words[3]) self.__rpc_data['programversion'] = words[5] elif words[0] == 'xprt:': self.__rpc_data['protocol'] = words[1] if words[1] == 'udp': self.__rpc_data['port'] = int(words[2]) self.__rpc_data['bind_count'] = int(words[3]) self.__rpc_data['rpcsends'] = int(words[4]) self.__rpc_data['rpcreceives'] = int(words[5]) self.__rpc_data['badxids'] = int(words[6]) self.__rpc_data['inflightsends'] = int(words[7]) self.__rpc_data['backlogutil'] = int(words[8]) elif words[1] == 'tcp': self.__rpc_data['port'] = words[2] self.__rpc_data['bind_count'] = int(words[3]) self.__rpc_data['connect_count'] = int(words[4]) self.__rpc_data['connect_time'] = int(words[5]) self.__rpc_data['idle_time'] = int(words[6]) self.__rpc_data['rpcsends'] = int(words[7]) self.__rpc_data['rpcreceives'] = int(words[8]) self.__rpc_data['badxids'] = int(words[9]) self.__rpc_data['inflightsends'] = int(words[10]) self.__rpc_data['backlogutil'] = int(words[11]) elif words[1] == 'rdma': self.__rpc_data['port'] = words[2] self.__rpc_data['bind_count'] = int(words[3]) self.__rpc_data['connect_count'] = int(words[4]) self.__rpc_data['connect_time'] = int(words[5]) self.__rpc_data['idle_time'] = int(words[6]) self.__rpc_data['rpcsends'] = int(words[7]) self.__rpc_data['rpcreceives'] = int(words[8]) self.__rpc_data['badxids'] = int(words[9]) self.__rpc_data['backlogutil'] = int(words[10]) self.__rpc_data['read_chunks'] = int(words[11]) self.__rpc_data['write_chunks'] = int(words[12]) self.__rpc_data['reply_chunks'] = int(words[13]) self.__rpc_data['total_rdma_req'] = int(words[14]) self.__rpc_data['total_rdma_rep'] = int(words[15]) self.__rpc_data['pullup'] = int(words[16]) self.__rpc_data['fixup'] = int(words[17]) self.__rpc_data['hardway'] = int(words[18]) self.__rpc_data['failed_marshal'] = int(words[19]) self.__rpc_data['bad_reply'] = int(words[20]) elif words[0] == 'per-op': self.__rpc_data['per-op'] = words else: op = words[0][:-1] self.__rpc_data['ops'] += [op] self.__rpc_data[op] = [int(word) for word in words[1:]] def parse_stats(self, lines): """Turn a list of lines from a mount stat file into a dictionary full of stats, keyed by name """ found = False for line in lines: words = line.split() if len(words) == 0: continue if (not found and words[0] != 'RPC'): self.__parse_nfs_line(words) continue found = True self.__parse_rpc_line(words) def is_nfs_mountpoint(self): """Return True if this is an NFS or NFSv4 mountpoint, otherwise return False """ if self.__nfs_data['fstype'] == 'nfs': return True elif self.__nfs_data['fstype'] == 'nfs4': return True return False def compare_iostats(self, old_stats): """Return the difference between two sets of stats """ result = DeviceData() # copy self into result for key, value in self.__nfs_data.items(): result.__nfs_data[key] = value for key, value in self.__rpc_data.items(): result.__rpc_data[key] = value # compute the difference of each item in the list # note the copy loop above does not copy the lists, just # the reference to them. so we build new lists here # for the result object. for op in result.__rpc_data['ops']: try: result.__rpc_data[op] = list(map( difference, self.__rpc_data[op], old_stats.__rpc_data[op])) except KeyError: continue # update the remaining keys we care about result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends'] result.__rpc_data['backlogutil'] -= old_stats.__rpc_data['backlogutil'] for key in NfsEventCounters: result.__nfs_data[key] -= old_stats.__nfs_data[key] for key in NfsByteCounters: result.__nfs_data[key] -= old_stats.__nfs_data[key] return result def __print_data_cache_stats(self): """Print the data cache hit rate """ nfs_stats = self.__nfs_data app_bytes_read = float(nfs_stats['normalreadbytes']) if app_bytes_read != 0: client_bytes_read = float(nfs_stats['serverreadbytes'] - nfs_stats['directreadbytes']) ratio = ((app_bytes_read - client_bytes_read) * 100) / app_bytes_read print() print('app bytes: %f client bytes %f' % (app_bytes_read, client_bytes_read)) print('Data cache hit ratio: %4.2f%%' % ratio) def __print_attr_cache_stats(self, sample_time): """Print attribute cache efficiency stats """ nfs_stats = self.__nfs_data print() print('%d VFS opens' % (nfs_stats['vfsopen'])) print('%d inoderevalidates (forced GETATTRs)' % \ (nfs_stats['inoderevalidates'])) print('%d page cache invalidations' % \ (nfs_stats['datainvalidates'])) print('%d attribute cache invalidations' % \ (nfs_stats['attrinvalidates'])) def __print_dir_cache_stats(self, sample_time): """Print directory stats """ nfs_stats = self.__nfs_data lookup_ops = self.__rpc_data['LOOKUP'][0] readdir_ops = self.__rpc_data['READDIR'][0] if 'READDIRPLUS' in self.__rpc_data: readdir_ops += self.__rpc_data['READDIRPLUS'][0] dentry_revals = nfs_stats['dentryrevalidates'] opens = nfs_stats['vfsopen'] lookups = nfs_stats['vfslookup'] getdents = nfs_stats['vfsreaddir'] print() print('%d open operations (pathname lookups)' % opens) print('%d dentry revalidates and %d vfs lookup requests' % \ (dentry_revals, lookups)) print('resulted in %d LOOKUPs on the wire' % lookup_ops) print('%d vfs getdents calls resulted in %d READDIRs on the wire' % \ (getdents, readdir_ops)) def __print_page_stats(self, sample_time): """Print page cache stats """ nfs_stats = self.__nfs_data vfsreadpage = nfs_stats['vfsreadpage'] vfsreadpages = nfs_stats['vfsreadpages'] pages_read = nfs_stats['readpages'] vfswritepage = nfs_stats['vfswritepage'] vfswritepages = nfs_stats['vfswritepages'] pages_written = nfs_stats['writepages'] print() print('%d nfs_readpage() calls read %d pages' % \ (vfsreadpage, vfsreadpage)) print('%d nfs_readpages() calls read %d pages' % \ (vfsreadpages, pages_read - vfsreadpage)) if vfsreadpages != 0: print('(%.1f pages per call)' % \ (float(pages_read - vfsreadpage) / vfsreadpages)) else: print() print() print('%d nfs_updatepage() calls' % nfs_stats['vfsupdatepage']) print('%d nfs_writepage() calls wrote %d pages' % \ (vfswritepage, vfswritepage)) print('%d nfs_writepages() calls wrote %d pages' % \ (vfswritepages, pages_written - vfswritepage)) if (vfswritepages) != 0: print('(%.1f pages per call)' % \ (float(pages_written - vfswritepage) / vfswritepages)) else: print() congestionwaits = nfs_stats['congestionwait'] if congestionwaits != 0: print() print('%d congestion waits' % congestionwaits) def __print_rpc_op_stats(self, op, sample_time): """Print generic stats for one RPC op """ if op not in self.__rpc_data: return rpc_stats = self.__rpc_data[op] ops = float(rpc_stats[0]) retrans = float(rpc_stats[1] - rpc_stats[0]) kilobytes = float(rpc_stats[3] + rpc_stats[4]) / 1024 queued_for = float(rpc_stats[5]) rtt = float(rpc_stats[6]) exe = float(rpc_stats[7]) if len(rpc_stats) >= 9: errs = float(rpc_stats[8]) # prevent floating point exceptions if ops != 0: kb_per_op = kilobytes / ops retrans_percent = (retrans * 100) / ops rtt_per_op = rtt / ops exe_per_op = exe / ops queued_for_per_op = queued_for / ops if len(rpc_stats) >= 9: errs_percent = (errs * 100) / ops else: kb_per_op = 0.0 retrans_percent = 0.0 rtt_per_op = 0.0 exe_per_op = 0.0 queued_for_per_op = 0.0 if len(rpc_stats) >= 9: errs_percent = 0.0 op += ':' print(format(op.lower(), '<16s'), end='') print(format('ops/s', '>8s'), end='') print(format('kB/s', '>16s'), end='') print(format('kB/op', '>16s'), end='') print(format('retrans', '>16s'), end='') print(format('avg RTT (ms)', '>16s'), end='') print(format('avg exe (ms)', '>16s'), end='') print(format('avg queue (ms)', '>16s'), end='') if len(rpc_stats) >= 9: print(format('errors', '>16s'), end='') print() print(format((ops / sample_time), '>24.3f'), end='') print(format((kilobytes / sample_time), '>16.3f'), end='') print(format(kb_per_op, '>16.3f'), end='') retransmits = '{0:>10.0f} ({1:>3.1f}%)'.format(retrans, retrans_percent).strip() print(format(retransmits, '>16'), end='') print(format(rtt_per_op, '>16.3f'), end='') print(format(exe_per_op, '>16.3f'), end='') print(format(queued_for_per_op, '>16.3f'), end='') if len(rpc_stats) >= 9: errors = '{0:>10.0f} ({1:>3.1f}%)'.format(errs, errs_percent).strip() print(format(errors, '>16'), end='') print() def ops(self, sample_time): sends = float(self.__rpc_data['rpcsends']) if sample_time == 0: sample_time = float(self.__nfs_data['age']) if sample_time == 0: sample_time = 1; return (sends / sample_time) def display_iostats(self, sample_time, which): """Display NFS and RPC stats in an iostat-like way """ sends = float(self.__rpc_data['rpcsends']) if sample_time == 0: sample_time = float(self.__nfs_data['age']) # sample_time could still be zero if the export was just mounted. # Set it to 1 to avoid divide by zero errors in this case since we'll # likely still have relevant mount statistics to show. # if sample_time == 0: sample_time = 1; if sends != 0: backlog = (float(self.__rpc_data['backlogutil']) / sends) / sample_time else: backlog = 0.0 print() print('%s mounted on %s:' % \ (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) print() print(format('ops/s', '>16') + format('rpc bklog', '>16')) print(format((sends / sample_time), '>16.3f'), end='') print(format(backlog, '>16.3f')) print() if which == 0: self.__print_rpc_op_stats('READ', sample_time) self.__print_rpc_op_stats('WRITE', sample_time) elif which == 1: self.__print_rpc_op_stats('GETATTR', sample_time) self.__print_rpc_op_stats('ACCESS', sample_time) self.__print_attr_cache_stats(sample_time) elif which == 2: self.__print_rpc_op_stats('LOOKUP', sample_time) self.__print_rpc_op_stats('READDIR', sample_time) if 'READDIRPLUS' in self.__rpc_data: self.__print_rpc_op_stats('READDIRPLUS', sample_time) self.__print_dir_cache_stats(sample_time) elif which == 3: self.__print_rpc_op_stats('READ', sample_time) self.__print_rpc_op_stats('WRITE', sample_time) self.__print_page_stats(sample_time) sys.stdout.flush() # # Functions # def parse_stats_file(filename): """pop the contents of a mountstats file into a dictionary, keyed by mount point. each value object is a list of the lines in the mountstats file corresponding to the mount point named in the key. """ ms_dict = dict() key = '' f = open(filename) for line in f.readlines(): words = line.split() if len(words) == 0: continue if line.startswith("no device mounted"): continue if words[0] == 'device': key = words[4] new = [ line.strip() ] elif 'nfs' in words or 'nfs4' in words: key = words[3] new = [ line.strip() ] else: new += [ line.strip() ] ms_dict[key] = new f.close return ms_dict def print_iostat_summary(old, new, devices, time, options): stats = {} diff_stats = {} devicelist = [] if old: # Trim device list to only include intersection of old and new data, # this addresses umounts due to autofs mountpoints for device in devices: if "fstype autofs" not in str(old[device]): devicelist.append(device) else: devicelist = devices for device in devicelist: stats[device] = DeviceData() stats[device].parse_stats(new[device]) if old: old_stats = DeviceData() old_stats.parse_stats(old[device]) diff_stats[device] = stats[device].compare_iostats(old_stats) if options.sort: if old: # We now have compared data and can print a comparison # ordered by mountpoint ops per second devicelist.sort(key=lambda x: diff_stats[x].ops(time), reverse=True) else: # First iteration, just sort by newly parsed ops/s devicelist.sort(key=lambda x: stats[x].ops(time), reverse=True) count = 1 for device in devicelist: if old: diff_stats[device].display_iostats(time, options.which) else: stats[device].display_iostats(time, options.which) count += 1 if (count > options.list): return def list_nfs_mounts(givenlist, mountstats): """return a list of NFS mounts given a list to validate or return a full list if the given list is empty - may return an empty list if none found """ devicelist = [] if len(givenlist) > 0: for device in givenlist: stats = DeviceData() stats.parse_stats(mountstats[device]) if stats.is_nfs_mountpoint(): devicelist += [device] else: for device, descr in mountstats.items(): stats = DeviceData() stats.parse_stats(descr) if stats.is_nfs_mountpoint(): devicelist += [device] return devicelist def iostat_command(name): """iostat-like command for NFS mount points """ mountstats = parse_stats_file('/proc/self/mountstats') devices = [] origdevices = [] interval_seen = False count_seen = False mydescription= """ Sample iostat-like program to display NFS client per-mount' statistics. The <interval> parameter specifies the amount of time in seconds between each report. The first report contains statistics for the time since each file system was mounted. Each subsequent report contains statistics collected during the interval since the previous report. If the <count> parameter is specified, the value of <count> determines the number of reports generated at <interval> seconds apart. If the interval parameter is specified without the <count> parameter, the command generates reports continuously. If one or more <mount point> names are specified, statistics for only these mount points will be displayed. Otherwise, all NFS mount points on the client are listed. """ parser = OptionParser( usage="usage: %prog [ <interval> [ <count> ] ] [ <options> ] [ <mount point> ]", description=mydescription, version='version %s' % Iostats_version) parser.set_defaults(which=0, sort=False, list=sys.maxsize) statgroup = OptionGroup(parser, "Statistics Options", 'File I/O is displayed unless one of the following is specified:') statgroup.add_option('-a', '--attr', action="store_const", dest="which", const=1, help='displays statistics related to the attribute cache') statgroup.add_option('-d', '--dir', action="store_const", dest="which", const=2, help='displays statistics related to directory operations') statgroup.add_option('-p', '--page', action="store_const", dest="which", const=3, help='displays statistics related to the page cache') parser.add_option_group(statgroup) displaygroup = OptionGroup(parser, "Display Options", 'Options affecting display format:') displaygroup.add_option('-s', '--sort', action="store_true", dest="sort", help="Sort NFS mount points by ops/second") displaygroup.add_option('-l','--list', action="store", type="int", dest="list", help="only print stats for first LIST mount points") parser.add_option_group(displaygroup) (options, args) = parser.parse_args(sys.argv) for arg in args: if arg == sys.argv[0]: continue if arg in mountstats: origdevices += [arg] elif not interval_seen: try: interval = int(arg) except: print('Illegal <interval> value %s' % arg) return if interval > 0: interval_seen = True else: print('Illegal <interval> value %s' % arg) return elif not count_seen: try: count = int(arg) except: print('Ilegal <count> value %s' % arg) return if count > 0: count_seen = True else: print('Illegal <count> value %s' % arg) return # make certain devices contains only NFS mount points devices = list_nfs_mounts(origdevices, mountstats) if len(devices) == 0: print('No NFS mount points were found') return old_mountstats = None sample_time = 0.0 if not interval_seen: print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) return if count_seen: while count != 0: print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) old_mountstats = mountstats time.sleep(interval) sample_time = interval mountstats = parse_stats_file('/proc/self/mountstats') # automount mountpoints add and drop, if automount is involved # we need to recheck the devices list when reparsing devices = list_nfs_mounts(origdevices,mountstats) if len(devices) == 0: print('No NFS mount points were found') return count -= 1 else: while True: print_iostat_summary(old_mountstats, mountstats, devices, sample_time, options) old_mountstats = mountstats time.sleep(interval) sample_time = interval mountstats = parse_stats_file('/proc/self/mountstats') # automount mountpoints add and drop, if automount is involved # we need to recheck the devices list when reparsing devices = list_nfs_mounts(origdevices,mountstats) if len(devices) == 0: print('No NFS mount points were found') return # # Main # prog = os.path.basename(sys.argv[0]) try: iostat_command(prog) except KeyboardInterrupt: print('Caught ^C... exiting') sys.exit(1) sys.exit(0)
Close