2013年6月17日星期一

【HP-UX】【Linux】【Unix】sar系统性能检测实战篇

++++++++++++++++++++++++++++++++++++++++++++
linux笔记之sar系统性能检测实战篇
----------------------------------
环境:
--------------------------------------------
操作系统:centos4.5_x86_32
shell:bsh,
脚本名:sar_all.sh,存放在/root/目录下。
使用sar对系统进行监控,每5s采样一次。
分别监测cpu,硬盘,网络接口情况。
每小时生成一个报告文件。
++++++++++++++++++++++++++++++++++++++++++++++
1./root/sar_all.sh脚本内容如下:
#!/bin/sh
HOSTNAME=$(hostname)
LOGPATH=/home/tmp_log
CPULOGFILE=$LOGPATH/cpu_log_${HOSTNAME}_$(date +%Y%m%d%H).log
MEMLOGFILE=$LOGPATH/mem_log_${HOSTNAME}_$(date +%Y%m%d%H).log
SWAPLOGFILE=$LOGPATH/swap_log_${HOSTNAME}_$(date +%Y%m%d%H).log
ETHLOGFILE=$LOGPATH/eth_log_${HOSTNAME}_$(date +%Y%m%d%H).log
ETH1LOGFILE=$LOGPATH/eth1_log_${HOSTNAME}_$(date +%Y%m%d%H).log
IOLOGFILE=$LOGPATH/io_log_${HOSTNAME}_$(date +%Y%m%d%H).log
T=5
H=`date +%H`
M=`date +%M`
M1=`expr $M + 1`
TTIME=$H:59:59
if [ ! -d "$LOGPATH" ]; then
mkdir -p "$LOGPATH"
fi
sar $T 0 -p -e $TTIME >> $CPULOGFILE &
sar $T 0 -r -e $TTIME >> $MEMLOGFILE &
sar $T 0 -R -e $TTIME >> $SWAPLOGFILE &
sar -n DEV 5 0 -e $TTIME >> $ETHLOGFILE &
sar -n EDEV 5 0 -e $TTIME >> $ETH1LOGFILE &
sar 5 0 -b -e $TTIME >> $IOLOGFILE &
2. 增加作业
# crontab -e
按i进入编辑模式,写入如下内容,(这里只在9月4日那天每小时都启动并监测)
* * 4 9 * /root/all
附录,sar详解
------------------------------------------
SAR系统性能检测工具

sar --- 收集、报告或保存系统活动信息 Collect, report, or save system activity information
Options:
-A 列出保存的当天的所有活动的文件内容, 等同于-bBcdqrRuvwWy -I SUM -n FULL -P ALL
-b 报告I/O和传送速率统计。这个参数仅用于2.5及以后内核。可显示以下字段
tps 每秒从物理磁盘I/O的次数。多个逻辑请求会被合并为一个I/O磁盘请求。一次传输
的大小是不确定的
rtps 每秒的读请求数
wtps 每秒的写请求数
bread/s 每秒读磁盘的数据块数(in blocks 1 block = 512B, 2.4以后内核)
bwrtn/s 每秒写磁盘的数据块数(in blocks 1 block = 512B, 2.4以后内核)
-B 显示内核页统计。 可显示如下字段
pgpgin/s
pgpgout/s
fault/s
majflt/s
-c 显示进程创建活动, 显示如下字段
proc/s 每秒进程创建数
-d m n 报告每个块设备的活动情况(2.4及以后内核)
m 每m秒采样一次
n 共采样n次
sar -d 30 5
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await
svctm %util
dev8-0 2.39 16.37 35.99 21.88 0.00 0.85
0.66 0.16
tps 显示指定设备的每秒I/O流量,多个逻辑请求可以合并为一个物理请求,流量
为不确定大小
rd_sec/s 从设备读取的扇区数,(1扇区=512B)
wr_sec/s 写入设备的扇区数
avgrq-sz 流出设备的扇区数
avgqu-sz 流出设备的平均队列长度
await 从设备流出的平均I/O请时间,包括请求在队列和服务时的时间
svctm 平均I/O请求的服务时间
%util I/O请求的CPU时间百分比,当数字接近100%时,设备出现饱和
-H
-h
-i interval 选取尽可能接近interval所标识的数量的记录数 (Select data records at
seconds as close as possible to the number specified by the interval parameter)
-q 报告队列长度和平均负载,可列出下列字段
runq-sz 执行中的队列长度(等待运行的进程数)
plist-sz 进程列表中的进程数
ldavg-1 最后一分钟的系统负载
ldavg-5 最后5分钟的系统负载
ldavg-15 最后15? 种拥南低掣涸?
-r 报告memory和swap使用统计,可列出如下字段
kbmemfree 可用的内存数(kB)
kbmemused 应用中的内存数,但不包括内核使用的内存(kB)
%memused 内存的使用百分比
kbcached 内核用于cache的内存数(kB)
kbswpfree
kbswpused
%swpused
kbswpcad 用于cache的swap内存数(kB)
-R 报告内存活动,可列出如下字段
frmpg/s 每秒空闲的内存页数,负值表示系统已经分配了的内存页数。注意:依据机器体系
的不同,内存页的大小有4kB或8kB
bufpg/s 每秒系统用于buffers的附加的内存页数。负值表示较少的页数用于系统buffers
campg/s 每秒系统用于cached的附加的内存页数。负值表示较少的页数用于系统cached
-t
-u 列出cpu的使用情况,可列出下列字段
%user 用户层
%nice   用户层
%system  系统层
%iowait  系统有外部磁盘I/O请求时的cpu(s)的空闲时间百分不(Percentage of %time that
the CPU or CPUs were idle during which the system had an outstanding disk I/O request)
%idle 系统没有外部磁盘I/O请求时的cpu(s)的空闲时间百分不(Percentage of time that
the CPU or CPUs were idle and the system did not have an outstanding disk I/O request)

-v 报告文件或其它内核表的inode的状态,可列出如下字段
dentunusd Number of unused cache entries in the directory cache.
file-sz 已经使用了的文件句柄数 Number of used file handles
inode-sz Number of allocated disk quota entries.
super-sz 内核已经分配了的超级块的句柄 Number of super block handlers allocated
by the kernel
%super-sz Percentage of allocated super block handlers with regard to the maximum
number of super block handlers that Linux can allocate.
dquot-sz 已经分配了的磁盘限额入口数 Number of allocated disk quota entries.
%dquot-sz Percentage of allocated disk quota entries with regard to the
maximum number of cached disk quota entries that can be allocated.
rtsig-sz 队列中RT信号数 Number of queued RT signals.
%rtsig-sz Percentage of queued RT signals with regard to the maximum number of RT
signals that can be queued.
-V 列出版本号和用法
-w 报告系统交换活动,列出如下字段
  cswch/s 系统每秒交换活动的次数 Total number of context switches per second
-W 报告swapping活动信息,可列出如下字段
  pswpin/s 每秒系统带来的交换页数 Total number of swap pages the system brought in
per second.
pswpout/s 系统每秒带出、拿出的交换页数
-y
-n {DEV|EDEV|SOCK|FULL}
报告网络活动统计
DEV 指定列出所有网络设备的活动统计,可列出如下字段
IFACE 网络接口卡设备名,如eth0
rxpck/s 每秒收到的包数
txpck/s 每秒传输的包数
rxbyt/s 每秒收到的数据字节数
txbyt/s 每秒传输的数据字节数
rxcmp/s 每秒收到的压缩包数
txcmp/s 每秒传输的压缩包数
rxmcst/s 每秒收到的多播包数

EDEV 指定列出所有网设备失败包的情况,可列出如下字段
IFACE 网络接口卡设备名
rxerr/s 每秒收到的总的失败包数
txerr/s 每秒钟传输时的错误包数
coll/s 每秒钟传输时的冲突包数
rxdrop/s 每秒钟收到的包中由于Linux空间缺乏而丢弃的包数
txdrop/s 每秒钟传输过程中由于Linux空间缺乏而丢弃的包数
txcarr/s 每秒钟传输过程中的carrier-errors的数目
rxfram/s 每秒钟收到的帧序列错误数
rxfifo/s 每秒钟FIFO泛滥错误包数
txfifo/s 每秒钟传输时FIFO泛滥的错误包数
NFS 列出NFS客户端活动报告。 列出如下字段
call/s 每秒成功的RPC请求数
retrans/s (由于server超时)每秒需重新传输的RPC请求数
read/s 每秒成功的RPC的read请求数
write/s 每秒成功的RPC的write请求数
access/s 每秒成功的RPC的access请求数
getatt/s 每秒成功的RPC的getattr请求数
NFSD 列出NFS服务端活动报告。列出如下字段
totsck 总的socktes数
tcpsck 当前应用中的tcp sockets数
udpsck 当前应用中的udp sockets数
rawsck 当前应用中的RAW sockets数
ip-frag 当前应用中的IP帧数
FULL 等于指定-n选项的所有参数
-x {pid|SELF|ALL}
-X {pid|SELF|ALL}
-I {irq|SUM|ALL|XALL}
报告中断统计资料。
irq 是中断号,指定多个-I irq参数可以观看到多个相关中断的情况
SUM 指定显示每秒中接收到的所有中断情况
ALL 指定显示所有中断的前16个中断情况
XALL 指定显示所有中断包括潜在的APIC中断源

-P {cpu|ALL}
如果缺省-P则报告系统内的所有CPU的统计。如果参数为ALL,则报告每一个CPU和所有CPU的统计数

[root@localhost ~]# sar -P 0
Linux 2.6.17-1.2187_FC5smp (localhost.localdomain) 2006年10月17日
08时30分01秒 CPU %user %nice %system %iowait %idle
08时40分01秒 0 6.24 0.00 0.64 0.02 93.10
[root@localhost ~]# sar -P 1
Linux 2.6.17-1.2187_FC5smp (localhost.localdomain) 2006年10月17日
08时30分01秒 CPU %user %nice %system %iowait %idle
08时40分01秒 1 7.66 0.00 0.60 0.03 91.71

-o [filename]
把报告输出到文件,否则显示到屏幕. 如果忽略filename,那么系统将把输出添加
到/var/log/sa/sadd定时生成文件内(dd代表当前日期)
-f [filename]
从filename中提取预先保存在文件内的记录,并显示到屏幕上. 缺省filename则
从/var/log/sa/sadd内提取
-s [hh:mm:ss]
设置报告的开始时间, Set the starting time of the data, causing the sar command to
extract records time-tagged at, or following, the time specified. The default starting time
is 08:00. Hours must be given in 24-hour format. This option can be used only when
data are read from a file (option -f )
-e [hh:mm:ss]
设置报告的结束时间, The default ending time is 18:00:00.This option can be used
only when data are read from or written to a file (options -f or -o )

[interval] 选择记录的时间间隔(秒)
[count] <默认为1>
sar 向标准输出列出选择的活动的累积数量。在多帐户系? 衬冢 ǜ嬉? ount(数量)和interval(
时间间隔)参数,以指定秒数为时间间隔的指定的次数信息.
如果interval参数指定为0,则sar显示系统启动以来的平均时间统计。
如果count参数指定为0,则报告将不连续不断的进行。
如果不指定参数,则仅显示CPU的活动,如果CPU使用率接近100% (user + nice + system), 则显示
出CPU局限
[root@localhost ~]# sar
08时26分00秒 LINUX RESTART
08时30分02秒 CPU %user %nice %system %iowait %idle
08时40分01秒 all 6.07 0.00 33.86 7.94 52.13
08时50分01秒 all 2.26 0.00 28.32 0.77 68.66
09时00分01秒 all 0.44 0.00 26.75 0.29 72.52
09时10分01秒 all 0.97 0.00 26.87 0.05 72.12
09时20分01秒 all 1.39 0.00 27.13 0.06 71.43
Average: all 2.22 0.00 28.58 1.82 67.38

如果需要多个样本和报告,那么可以如下所做
sar -o data.file interval count >/dev/null 2>&1 &
[root@localhost ~]# sar -u 2 5 报告CPU的使用情况,每2秒钟一次共输出5行
09时01分53秒 CPU %user %nice %system %iowait %idle
09时01分55秒 all 36.41 0.00 2.49 47.38 13.72
09时01分57秒 all 38.40 0.00 18.20 36.91 6.48
09时01分59秒 all 32.50 0.00 4.50 52.00 11.00
09时02分01秒 all 44.00 0.00 48.50 7.25 0.25
09时02分03秒 all 36.91 0.00 30.42 27.93 4.74
Average: all 37.64 0.00 20.82 34.30 7.24
sar -I 14 -o int14.file 2 10
每2秒报告一次14号中断的情况,共输出10行,并把结果保存到文件int14.file内
Report statistics on IRQ 14 for each 2 seconds. 10 lines are displayed. Data
are stored in a file called int14.file.
sar -r -n DEV -f /var/log/sa/sa16
列出每天保存在/var/log/sa/sa16内的内存、交换分区、网络活动情况
Display memory, swap space and network statistics saved in daily data file ’sa16’.
sar -A
列出保存的当天的活动文件内容
Display all the statistics saved in current daily data file.


监视某个进程
1. 通过ps命令找到相应进程的PID:
ps -e
2.
使用pidstat命令监视进程,详细用法见:http://pagesperso-
orange.fr/sebastien.godard/man_pidstat.html
pidstat 2 5
//每隔2秒,显示5次,所有活动进程的CPU使用情况
pidstat -p 3132 2 5
//每隔2秒,显示5次,PID为1643的进程的CPU使用情况显示
pidstat -p 3132 2 5 -r
//每隔2秒,显示5次,PID为1643的进程的内存使用情况显示
3. 很可惜的是,pidstat命令没有保存性能数据的功能。
查看性能数据
在sysstat工具包中,sar是最强大的了,通过sar几乎可以监视所有的性能数据,同时,sar还
支持将性能数据保存起来。
sar详细用法请见:http://pagesperso-orange.fr/sebastien.godard/man_sar.html
1. 查看CPU使用情况
sar 2 5
//每隔2秒,显示5次,CPU使用的情况
2. 查看内存使用情况
sar -r 2 5
//每隔2秒,显示5次,内存使用的情况
3. 查看网络吞吐量
sar -n DEV 2 5
//每隔2秒,显示5次,网络吞吐量情况
保存性能数据
sar支持保存成两种格式的文件,一种是文本文件,一种是二进制文件(只有通过sar自己的命
令才能查看)。
1.
保存为文本文件
结合上面的查看命令,加入 > filename 参数即可保存文本文件,下面列出几个有用的命令:
sar 1 10 > data.txt
//每隔1秒,写入10次,把CPU使用数据保存到data.txt文件中。
sar 1 0 -e 15:00:00 > data.txt
//每隔1秒记录CPU的使用情况,直到15点,数据将保存到data.txt文件中。(-e 参数表示结束时
间,注意时间格式:必须为hh:mm:ss格式)
sar 1 0 -r -e 15:00:00 > data.txt
//每隔1秒记录内存使用情况,直到15点,数据将保存到data.txt文件中。
sar 1 0 -n DEV -e 15:00:00 > data.txt
//每隔1秒记录网络使用情况,直到15点,数据将保存到data.txt文件中。
用WinSCP工具从Linux服务器上取下data.txt文件,内容如下:
Linux 2.6.18-53.el5 (Performancesvr5) 2008年05月05日 _x86_64_
11时04分05秒 CPU %user %nice %system %iowait %steal %idle
11时04分06秒 all 0.25 0.00 0.00 0.00 0.00 99.75
11时04分07秒 all 0.00 0.00 0.25 0.00 0.00 99.75
11时04分08秒 all 0.25 0.00 0.25 1.50 0.00 98.00
11时04分09秒 all 0.25 0.00 0.00 0.50 0.00 99.25
11时04分10秒 all 0.00 0.00 0.00 0.00 0.00 100.00
11时04分11秒 all 0.25 0.00 0.25 0.00 0.00 99.50
11时04分12秒 all 0.00 0.00 0.25 0.00 0.00 99.75
11时04分13秒 all 0.50 0.00 0.50 0.99 0.00 98.01
11时04分14秒 all 0.00 0.00 0.00 1.25 0.00 98.75
11时04分15秒 all 0.50 0.00 0.00 0.00 0.00 99.50
平均时间: all 0.20 0.00 0.15 0.42 0.00 99.23
有了这份数据,就可以轻松的使用WPS表格来统计CPU的使用情况了。

具体应用实例说明
----------

查看所有cpu,无休止的
sar 3 0 -p
查看cpu,从某点开始到几点结束
sar 3 0 -p -s[hh:mm:ss] -e [hh:mm:ss]
sar 3 0 -p > 日志存的所在文件名(文本)
sar 3 0 -p -o 日志存的所在文件名(二进制)
查看内存
sar 5 0 -r
查看网络吞吐量
sar -n DEV 2 5


------------------------
crond详解
crontab [-u user] filecrontab [-u user] { -l | -r | -e }
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时
程表。
-u user 是指设定指定user的时程表,这个前提是你必须要有其权限(比如说是root)才能够指定他
人的时程表。
如果不使用 -u user 的话,就是表示设定自己的时程表。

参数 :

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,
则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表

时程表的格式如下 :
f1 f2 f3 f4 f5 program
即: 分 时 日 月 星期 脚本名

其中 f1 是表示分钟,
f2 表示小时,
f3 表示一个月份中的第几日,
f4 表示月份,
f5 表示一个星期中的第几天。
program 表示要执行的程式。

当 f1 为 * 时表示每分钟都要执行 program,
f2 为 * 时表示每小时都要执行程式,其余类推

当 f1 为 a-b 时表示从第a 分钟到第b分钟这段时间内要执行,
f2 为 a-b 时表示从第a到第b小时都要执行,其余类推

当 f1 为 */n 时表示每n分钟个时间间隔执行一次,
f2 为 */n 表示每n小时个时间间隔执行一次,其余类推

当 f1 为 a, b, c,... 时表示第a, b, c,... 分钟要执行,
f2 为 a, b, c,... 时表示第a, b, c...个小时要执行,其余类推
使用者也可以将所有的设定先存放在档案file中,用crontab file的方式来设定时程表。
例子 :
每月每天每小时的第0 分钟执行一次 /bin/ls :
0 * * * * /bin/ls
在12月内,每天的早上6点到12点中,每隔20分钟执行一次/usr/bin/backup :
*/20 6-12 * 12 * /usr/bin/backup
周一到周五每天下午5:00 寄一封信给 xiutuo@xiutuo.com:
0 17 * * 1-5 mail -s "hi" xiutuo@xiutuo.com < /tmp/maildata
每月每天的午夜0 点20分, 2点20分, 4点20分....执行 echo "haha"
20 0-23/2 * * * echo "haha"

注意 :

当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到
这样的信,
请在每一行空一格之后加上 > /dev/null 2>&1 即可。

2013年3月19日星期二

【経営】【転載】社員の給料を思い切りカットできるか




技術と全く違う話しだったが、読んだら、なるほどと思ったので、一応転載させて頂きます。

 マーケティング課長として高い給与を約束してヘッドハンティングしたものの、全然アイデアを出さずにブラブラしている社員がいる。もう我慢の限界だから給与を半分にカットしたい――。そんな経営者からの相談が少なくない。

 高給ぶら下がり社員の給与をカットしようとする場合、まず検討するのが個別同意である。労働契約法の第8条で労働者と使用者は合意により契約内容を変更できると規定されている。実務上は文書化が必要だ。

 これに基づいてマーケティング課長と覚書を交わし「2012年の12月度から月給を100万円から50万円に変更することに合意します」とお互いにサインすれば、基本的には給与を引き下げられる。

 しかし「私はちゃんと仕事をしています。まだ結果が出ていないだけです」と拒否されたら、個別同意による給与カットはできない。

 拒否されたら就業規則の降格規定に基づいて給与の引き下げを検討することになる。ややこしいが降格には狭義の降格と降職があり、それらを実施して給与をカットするのだ。

 狭義の降格による給与の引き下げとは、職能資格制度を採用している企業の場合、上級職1級を2級に降格するというように、職能等級を下げることで給与をカットすることを指す。一方、降職とは部長を課長にするというように、職位を引き下げることである。降職による給与の引き下げは、たとえばマーケティング課長から係長に降職させることで、5万円だった課長手当を3万円の係長手当にするというやり方で給与カットを行うものである。

 また外資系に多い、仕事の内容とポジションによって給与が変わる職務給制度を採用している企業なら、マネジャーからアシスタントマネジャーへ降格するといった形で給与を引き下げられる。
 社員の給与を引き下げる方法には以上のようなやり方があるが、実際にはどれもハードルが高い。

 まず個別同意だが、給与カットというマイナスの話で本人の同意を得ることは困難である。まして書面にすることは非常に難しい。実態としては社長が社員へ一方的に給与カットの話をして「じゃあ、そういうことで」で済まそうとするようなケースが多い。こうした場合、往々にして後でトラブルになる。

 降格による給与カットは、そもそも就業規則に降格規定がなければお話にならない。なければ規定をつくるところから始める必要がある。

 降格規定があっても引き下げ金額が大きいと、裁判になるとストップをかけられる。実際に社員の給与を約5割カットしたところ裁判になり、「社員が生活できなくなる」との理由で会社側が負けた判例がある。降格規定をつくっても、引き下げ幅は我々の感覚だとせいぜい1年に1割が上限だ。

 加えて、降格や降職には明確な根拠が必要であるが、「この人は仕事ができない」と証明するのは意外に難しい。営業のように成果が数字で表れる仕事でも、担当エリアや客層によって、能力不足といえるかどうかは微妙だったりする。

 したがっていきなり降格や降職に踏み切るのではなく、本人の意見や同じ部署、他の部署の意見を聞いて、降格や降職の判断を行う仕組みをつくったうえで、社員の生活に支障のない範囲で給与を引き下げるように、丁寧に段階を踏んで進める必要がある。

 やりたい放題に給与カットや降格を行っている経営者を見かけることがある。しかし、そうした扱いを受けた社員が労働組合に駆け込んだことを知り、あわてて我々のような経営者側に立つ弁護士へ相談に来られても、時すでに遅し、もはやお手上げである。