什么是进程会计?
进程会计记录了什么时间启动了什么进程,进程的属主是什么,进程的结束时间等信息。
linux默认并没有开启进程会计,那么如何开启进程会计呢?
centos中提供了一个叫做psacct的软件包,其中包含accton 、lastcomm、ac、sa、dump-acct、dump-utmp几个命令,可以帮助我们开启、关闭、查看进程会计信息,简要介绍如下:
accton on|off|file
打开、关闭进程会计,也可以直接accton file来指定进程会计信息的记录位置,同时开启进程会计;注意:
进程会计信息的默认存储位置: /var/account/pacct
进程会计信息存储文件需要预先手动创建(touch一个就行)
实现原理:
linux提供了一个acct系统调用,用来通知内核信息进程会计:
accton on 等同于: acct(“/var/account/pacct”)
accton off等同于: acct(NULL)
(注意:有的版本可能不能accton off,而是不带任何参数就意味着off)
lastcomm: 查看进程会计信息
# lastcomm -f acct
accton root pts/0 0.00 secs Tue Apr 4 13:13
sh zabbix __ 0.00 secs Tue Apr 4 13:13
wc zabbix __ 0.00 secs Tue Apr 4 13:13
grep zabbix __ 0.00 secs Tue Apr 4 13:13
netstat zabbix __ 0.01 secs Tue Apr 4 13:13
accton root pts/0 0.00 secs Tue Apr 4 13:13
...
1
2
3
4
5
6
7
8
# lastcomm -f acct
acctonrootpts/00.00secsTueApr413:13
shzabbix__0.00secsTueApr413:13
wczabbix__0.00secsTueApr413:13
grepzabbix__0.00secsTueApr413:13
netstatzabbix__0.01secsTueApr413:13
acctonrootpts/00.00secsTueApr413:13
...
sa:统计进程会计信息
# sa -a acct
227 0.02re 0.00cp 0avio 28444k
2 0.00re 0.00cp 0avio 29776k netstat
88 0.00re 0.00cp 0avio 31031k ls
84 0.01re 0.00cp 0avio 26976k sleep
10 0.00re 0.00cp 0avio 28816k sh
10 0.00re 0.00cp 0avio 28160k grep
8 0.00re 0.00cp 0avio 28368k awk
8 0.00re 0.00cp 0avio 26976k head
8 0.00re 0.00cp 0avio 26976k cat
1
2
3
4
5
6
7
8
9
10
# sa -a acct
2270.02re0.00cp0avio28444k
20.00re0.00cp0avio29776knetstat
880.00re0.00cp0avio31031kls
840.01re0.00cp0avio26976ksleep
100.00re0.00cp0avio28816ksh
100.00re0.00cp0avio28160kgrep
80.00re0.00cp0avio28368kawk
80.00re0.00cp0avio26976khead
80.00re0.00cp0avio26976kcat
dump-utmp
dump-utmp /var/log/wtmp|head
reboot |~ |2|~~ | 0|3.10.0-327.el7.x86_64 |Tue Mar 7 00:42:20 2017
|tty1 |5|tty1| 1806| |Mon Mar 6 16:42:36 2017
LOGIN |tty1 |6|tty1| 1806| |Mon Mar 6 16:42:36 2017
runlevel |~ |1|~~ | 51|3.10.0-327.el7.x86_64
1
2
3
4
5
dump-utmp/var/log/wtmp|head
reboot|~|2|~~|0|3.10.0-327.el7.x86_64|TueMar700:42:202017
|tty1|5|tty1|1806||MonMar616:42:362017
LOGIN|tty1|6|tty1|1806||MonMar616:42:362017
runlevel|~|1|~~|51|3.10.0-327.el7.x86_64