OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune

 

Intel VTune Amplifier XE and VTune Performance Analyzer 

http://software.intel.com/en-us/intel-vtune-amplifier-xe-2013-evaluation-options/
http://software.intel.com/en-us/intel-vtune-amplifier-xe
http://www.intel.com/cd/software/products/apac/zho/vtune/275878.htm

http://baike.baidu.com/view/1089180.htm

英特尔VTune? 性能分析器
英特尔VTune? 性能分析器可通过图形用户界面轻松优化应用性能,而且无需重新编译。
它独立于编译器和语言,因此可与 C、C++、Fortran、C#、Java、.NET 等等?一起使用。
与只提供调用图分析或一组有限的采样事件的产品不同,VTune 分析器可通过一组丰富的适用于所有最新英特尔? 处理器的调试事件同时实现上述两种功能。
开发出在运行 Microsoft Windows Vista*、Windows* XP 或 Windows Server* 的最新 64 位多核系统上运行如飞的软件。
无需重新编译,并且只需极低的开销(不到 5%),便可以确定性能瓶颈。使用图形界面与强大的 Visual Studio* 与 .NET 集成功能来分析结果。快速探查源代码,确定存在问题的代码行。
优化多核性能
内含英特尔线程档案器!对应用进行线程处理后并没有达到您预期的效果?英特尔线程档案器可帮助您调试多线程代码,从而在当今的多核处理器上取得最佳性能。
英特尔VTune? 性能分析器 Linux* 版是完全基于 Linux 的解决方案,无论是在单核系统上还是在多核系统上,要使您的软件以最快速度运行,该解决方案都是不可或缺的。
无需重新编译,也无需通过超级计算机系统在手持设备上链接,它便能分析应用程序。它功能强大,可处理大型应用程序(源代码超过 1 GB),并支持多核多处理器以及使用最新英特尔处理器的 NuMA 系统。

使用Intel VTune性能分析器分析.NET模块运行时间

http://www.cnblogs.com/daizhj/archive/2009/01/19/1374973.html

Intel Vtune Amplifier XE2011-性能优化工具

http://hi.baidu.com/l_rigidity/item/d91dc75d73a5b93a33e0a939

该工具的目的: 该工具用于代码性能优化,找出代码中的瓶颈或热点。
简单使用:
1.首先通过file->new ->project 来创建一个project. 输入Project name和location.
2.之后会弹出一个配置Project Properties 的对话框,选择需要profile的对象target, 在这里提供了3中Target的类型:
a.Launch Application, 在这种target的情况下,在下面的Application中输入你要profile的应用程序,于是在后面开始profile的时候,VTune会启动这个应用程序。
b.Attach to Process, 在种target的情况下,在下面的ProcessID中输入进程ID即可,主要针对的是已经启动的后台程序,VTune可以attach to Process对某一个时段的操作进行profile.
c.Profile System,  在这种情况下,不需要选择target,直接对系统进程进行profile.
这3种情况和VS的debug模式很像。
3.在配置完Project Properties之后,就可以选择new Analysis 图标,对这个project选择的target创建新的analysis. 可以针对一个project创建很多次的analysis。
4.在创建新的analysis时,需要选择analysis的类型,我只试过HotSpots这类型的分析类型,选择类型之后,就可以点击右边的start按钮开始profile工作了。
5.在完成profile时,点击stop按钮,就会结束profile,接着对profile的结构进行分析整理,以图表的形式展现出每个耗时的hotspot。
6.于是程序员就可以针对hotspot,进行有针对性的优化。
PS:其自带的一个Get Start 帮助文档很有帮助,对于初次使用的人很有帮助。

Intel? VTune? Amplifier XE 2011 功能演示 (中文视频) / Peter Wang (Intel) 于 星期五, 19/11/2010 - 14:25 提交

http://software.intel.com/zh-cn/blogs/2010/11/19/intelr-vtunetm-amplifier-xe-2011

全部中文演示,每节5-10分钟,快速掌握产品的使用技巧。

Intel? VTune? Amplifier XE 2011 功能演示1 - 总述 (中文)- /zh-cn/forums/showthread.php

Intel? VTune? Amplifier XE 2011 功能演示2 - 热点分析(中文)- /zh-cn/forums/showthread.php

Intel? VTune? Amplifier XE 2011 功能演示3 - 并行度分析(中文)- /zh-cn/forums/showthread.php

Intel? VTune? Amplifier XE 2011 功能演示4 - 等待和锁(中文)- /zh-cn/forums/showthread.php

Intel? VTune? Amplifier XE 2011 功能演示5 - 处理器的事件 (中文)- /zh-cn/forums/showthread.php

 

http://blog.163.com/lideren_2008/blog/static/147057920116117242543/

1.vtune默认安装目录
/opt/intel/vtune_amplifier_xe_2011/
vi ~/.bashrc   追加如下内容
alias amplxe-cl='/opt/intel/vtune_amplifier_xe_2011/bin32/amplxe-cl'
alias amplxe-configurator='/opt/intel/vtune_amplifier_xe_2011/bin32/amplxe-configurator'
alias amplxe-feedback='/opt/intel/vtune_amplifier_xe_2011/bin32/amplxe-feedback'
alias amplxe-gui='/opt/intel/vtune_amplifier_xe_2011/bin32/amplxe-gui'
alias amplxe-runsa='/opt/intel/vtune_amplifier_xe_2011/bin32/amplxe-runsa'
alias amplxe-runss='/opt/intel/vtune_amplifier_xe_2011/bin32/amplxe-runss'
alias crashreport='/opt/intel/vtune_amplifier_xe_2011/bin32/crashreport'
alias dicer_transform_helper2='/opt/intel/vtune_amplifier_xe_2011/bin32/dicer_transform_helper2'
alias pin='/opt/intel/vtune_amplifier_xe_2011/bin32/pin'
alias pinbin='/opt/intel/vtune_amplifier_xe_2011/bin32/pinbin'
source ~/.bashrc  使追加变量声明生效
2.列出example程序相关模块的热点函数:
amplxe-cl -report hotspots -r amplxe-cl -filter module=example Using result path 'amplxe-cl'
3.打印example模块上热点函数的性能数据
amplxe-cl -report pmu-events -r event_result -group-by function -filter module=example Using result path `event_result'
4.打印pid为12345的程序上热点函数的性能数据
amplxe-cl -collect hotspots -result-dir hotspots -duration 10 -target-pid 12345
5.生成并打印热点分析报告
amplxe-cl -report hotspots -result-dir hotspots -group-by function
Function        Module  CPU Time
KSpawnPointList::Active example    0.140
KSubWorld::GetWorldTemplateId   example    0.100
KNpc::Activate  example    0.060
_Buff_Env_Param::_Buff_Env_Param        example    0.030
BuffList::Time  example    0.020
KRegion::Activate       example    0.020
KRegion::IsActive       example    0.020
_Buff_Param::_Buff_Param        example    0.020
CUnaryAttr::GetValue    example    0.010
KNode::GetNext  example    0.010
KNpc::GetOffY   example    0.010
KNpc::ReceiveDamage     example    0.010
KSubWorldSet::MainLoop  example    0.010
NpcController::Active   example    0.010
NpcController::GetCurrentTime   example    0.010
Executing actions 99 % done     
参考
http://software.intel.com/zh-cn/blogs/2011/04/18/vtune-amplifier-xe/
http://software.intel.com/zh-cn/blogs/2010/11/10/amplxe-cl/

 

Linux性能分析与调整命令汇总

http://www.bitscn.com/os/linux/201009/190744.html

Linux性能监控:CPU、内存、IO.rar

Linux性能监控:CPU、内存、IO.chm

 

CPU性能分析工具:

vmstat

ps

sar

time

strace

pstree

top

Memory性能分析工具:

vmstat

strace

top

ipcs

ipcrm

cat /proc/meminfo

cat /proc/slabinfo

cat /proc/ /maps

I/O性能分析工具:

vmstat

ipstat

repquota

quotacheck

Network性能分析工具:

ftp://metalab.unc.edu/pub/Linux/system/network/monitor/

ifconfig

ethereal

tethereal

iptraf // ftp://metalab.unc.edu/pub/Linux/system/network/monitor/iptraf-2.4.0.tar.gz

iwconfig

nfsstat

mrtg

ntop

netstat

cat /proc/sys/net

Linux 性能调优工具

当通过上述工具及命令,我们发现了应用的性能瓶颈以后,我们可以通过以下工具或者命令来进行性能的调整。

CPU性能调优工具:

nice / renic

sysctl

Memory性能调优工具:

swapon

ulimit

sysctl

I/O性能调优工具:

edquota

quoton

sysctl

boot line:

elevator=

Network性能调优工具:

ifconfig

iwconfig

sysctl

CPU性能调整

当一个系统的CPU空闲时间或者等待时间小于5%时,我们就可以认为系统的CPU资源耗尽,我们应该对CPU进行性能调整。

CPU性能调整方法:

编辑/proc/sys/kernel/中的文件,修改内核参数。

#cd /proc/sys/kernel/

# ls /proc/sys/kernel/

acct hotplug panic real-root-dev

cad_pid modprobe panic_on_oops sem

cap-bound msgmax pid_max shmall

core_pattern msgmnb powersave-nap shmmax

core_uses_pid msgmni print-fatal-signals shmmni

ctrl-alt-del ngroups_max printk suid_dumpable

domainname osrelease printk_ratelimit sysrq

exec-shield ostype printk_ratelimit_burst tainted

exec-shield-randomize overflowgid pty threads-max

hostname overflowuid random version

一般可能需要编辑的是pid_max和threads-max,如下:

# sysctl kernel.threads-max

kernel.threads-max = 8192

# sysctl kernel.threads-max=10000

kernel.threads-max = 10000

Memory性能调整

当一个应用系统的内存资源出现下面的情况时,我们认为需要进行Memory性能调整:

页面频繁换进换出;

缺少非活动页。

例如在使用vmstat命令时发现,memory的cache使用率非常低,而swap的si或者so则有比较高的数据值时,应该警惕内存的性能问题。

Memory性能调整方法:

1。关闭非核心的服务进程。

相关的方法请见CPU性能调整部分。

2。修改/proc/sys/vm/下的系统参数。

# ls /proc/sys/vm/

block_dump laptop_mode nr_pdflush_threads

dirty_background_ratio legacy_va_layout overcommit_memory

dirty_expire_centisecs lower_zone_protection overcommit_ratio

dirty_ratio max_map_count page-cluster

dirty_writeback_centisecs min_free_kbytes swappiness

hugetlb_shm_group nr_hugepages vfs_cache_pressure

# sysctl vm.min_free_kbytes

vm.min_free_kbytes = 1024

# sysctl -w vm.min_free_kbytes=2508

vm.min_free_kbytes = 2508

# cat /etc/sysctl.conf

vm.min_free_kbytes=2058

3。配置系统的swap交换分区等于或者2倍于物理内存。

# free

total used free shared buffers cached

Mem: 987656 970240 17416 0 63324 742400

-/+ buffers/cache: 164516 823140

Swap: 1998840 150272 1848568

I/O性能调整

系统出现以下情况时,我们认为该系统存在I/O性能问题:

系统等待I/O的时间超过50%;

一个设备的平均队列长度大于5。

我们可以通过诸如vmstat等命令,查看CPU的wa等待时间,以得到系统是否存在I/O性能问题的准确信息。

I/O性能调整方法:

1。修改I/O调度算法。

Linux已知的I/O调试算法有4种:

deadline – Deadline I/O scheduler

as – Anticipatory I/O scheduler

cfq – Complete Fair Queuing scheduler

noop – Noop I/O scheduler

可以编辑/etc/yaboot.conf文件修改参数elevator得到。

# vi /etc/yaboot.conf

image=/vmlinuz-2.6.9-11.EL

label=linux

read-only

initrd=/initrd-2.6.9-11.EL.img

root=/dev/VolGroup00/LogVol00

append=”elevator=cfq rhgb quiet”

2。文件系统调整。

对于文件系统的调整,有几个公认的准则:

将I/O负载相对平均的分配到所有可用的磁盘上;

选择合适的文件系统,Linux内核支持reiserfs、ext2、ext3、jfs、xfs等文件系统;

# mkfs -t reiserfs -j /dev/sdc1

文件系统即使在建立后,本身也可以通过命令调优;

tune2fs (ext2/ext3)

reiserfstune (reiserfs)

jfs_tune (jfs)

3。文件系统Mount时可加入选项noatime、nodiratime。

# vi /etc/fstab

/dev/sdb1 /backup reiserfs acl, user_xattr, noatime, nodiratime 1 1

4。调整块设备的READAHEAD,调大RA值。

[root@overflowuid ~]# blockdev –report

RO RA SSZ BSZ StartSec Size Device

rw 256 512 4096 0 71096640 /dev/sdb

rw 256 512 4096 32 71094240 /dev/sdb1

[root@overflowuid ~]# blockdev –setra 2048 /dev/sdb1

[root@overflowuid ~]# blockdev –report

RO RA SSZ BSZ StartSec Size Device

rw 2048 512 4096 0 71096640 /dev/sdb

rw 2048 512 4096 32 71094240 /dev/sdb1

Network性能调整

一个应用系统出现如下情况时,我们认为该系统存在网络性能问题:

网络接口的吞吐量小于期望值;

出现大量的丢包现象;

出现大量的冲突现象。

Network性能调整方法:

Linux命令之Ethtool

http://www.iteye.com/topic/347977

http://chengjunflying.iteye.com/blog/980976

[root@Loadrunner19 ~]# dmesg | grep -i eth0
e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
eth0: no IPv6 routers present
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
eth0: no IPv6 routers present
device eth0 entered promiscuous mode
device eth0 left promiscuous mode
device eth0 entered promiscuous mode
device eth0 left promiscuous mode
device eth0 entered promiscuous mode
device eth0 left promiscuous mode
[root@Loadrunner19 ~]# /sbin/ethtool eth0
Settings for eth0:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Supports auto-negotiation: Yes
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half 100baseT/Full 
	                        1000baseT/Full 
	Advertised auto-negotiation: Yes
	Speed: 1000Mb/s
	Duplex: Full
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: on
	Supports Wake-on: d
	Wake-on: d
	Current message level: 0x00000007 (7)
	Link detected: yes

 

描述:
Ethtool是用于查询及设置网卡参数的命令。

概要:

Java代码   收藏代码
  1. ethtool ethX      //查询ethX网口基本设置  
  2. ethtool –h        //显示ethtool的命令帮助(help)  
  3. ethtool –i ethX    //查询ethX网口的相关信息   
  4. ethtool –d ethX    //查询ethX网口注册性信息  
  5. ethtool –r ethX    //重置ethX网口到自适应模式  
  6. ethtool –S ethX    //查询ethX网口收发包统计  
  7. ethtool –s ethX [speed 10|100|1000]\         //设置网口速率10/100/1000M  
  8. [duplex half|full]\           //设置网口半/全双工  
  9. [autoneg on|off]\            //设置网口是否自协商  
  10. [port tp|aui|bnc|mii]\         //设置网口类型  
  11. [phyad N]\                   
  12. [xcvr internal|exteral]\  
  13. [wol p|u|m|b|a|g|s|d...]\  
  14. [sopass xx:yy:zz:aa:bb:cc]\  
  15. [msglvl N] 

 

1。调整网卡的参数。

# ethtool eth0

Settings for eth0:

Supported ports: [ TP ]

Supported link modes: 10baseT/Half 10baseT/Full

100baseT/Half 100baseT/Full

1000baseT/Full

Supports auto-negotiation: Yes

Advertised link modes: 10baseT/Half 10baseT/Full

100baseT/Half 100baseT/Full

1000baseT/Full

Advertised auto-negotiation: Yes

Speed: 100Mb/s

Duplex: Half

Port: Twisted Pair

PHYAD: 0

Transceiver: internal

Auto-negotiation: on

Supports Wake-on: d

Wake-on: d

Current message level: 0×00000007 (7)

Link detected: yes

#ethtool -s eth0 duplex full

#ifconfig eth0 mtu 9000 up

2。增加网络缓冲区和包的队列。

# cat /proc/sys/net/ipv4/tcp_mem

196608 262144 393216

# cat /proc/sys/net/core/rmem_default

135168

# cat /proc/sys/net/core/rmem_max

131071

# cat /proc/sys/net/core/wmem_default

135168

# cat /proc/sys/net/core/wmem_max

131071

# cat /proc/sys/net/core/optmem_max

20480

# cat /proc/sys/net/core/netdev_max_backlog

300

# sysctl net.core.rmem_max

net.core.rmem_max = 131071

# sysctl -w net.core.rmem_max=135168

net.core.rmem_max = 135168

3。调整Webserving。

# sysctl net.ipv4.tcp_tw_reuse

net.ipv4.tcp_tw_reuse = 0

# sysctl -w net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_tw_reuse = 1

# sysctl net.ipv4.tcp_tw_recycle

net.ipv4.tcp_tw_recycle = 0

# sysctl -w net.ipv4.tcp_tw_recycle=1

net.ipv4.tcp_tw_recycle = 1

 

 

Linux System and Performance Monitoring(总结篇)
http://www.hashei.me/2009/09/linux_system_and_performance_monitoring_summary.html

RedHat Enterprise Linux 3 update 7
Dell 1850 Dual Core Xenon Processors, 2 GB RAM, 75GB 15K Drives
Custom LAMP software stack(译注:Llinux+apache+mysql+php 环境)

1. 首先使用vmstat 查看大致的系统性能情况:

# vmstat 1 10

分析:
1,不会是内存不足导致,因为swapping 始终没变化(si 和 so).尽管空闲内存不多(free),但swpd 也没有变化.
2,CPU 方面也没有太大问题,尽管有一些运行队列(procs r),但处理器还始终有50% 多的idle(CPU id).
3,有太多的上下文切换(cs)以及disk block从RAM中被读入(bo).
4,CPU 还有平均20% 的I/O 等待情况.

结论:
从以上总结出,这是一个I/O 瓶颈.

2. 然后使用iostat 检查是谁在发出IO 请求:

# iostat -x 1

分析:
1,看上去只有/dev/sda3 分区很活跃,其他分区都很空闲.
2,差不多有1200 读IOPS,磁盘本身是支持200 IOPS左右(译注:参考之前的IOPS 计算公式).
3,有超过2秒,实际上没有一个读磁盘(rkb/s).这和在vmstat 看到有大量I/O wait是有关系的.
4,大量的read IOPS(r/s)和在vmstat 中大量的上下文是匹配的.这说明很多读操作都是失败的.

结论:
从以上总结出,部分应用程序带来的读请求,已经超出了I/O 子系统可处理的范围.

3. 使用top 来查找系统最活跃的应用程序

# top -d 1

分析:
1,占用资源最多的好像就是mysql 进程,其他都处于完全idle 状态.
2,在top(wa) 看到的数值,和在vmstat 看到的wio 数值是有关联的.

结论:
从以上总结出,似乎就只有mysql 进程在请求资源,因此可以推论它就是导致问题的关键.

4. 现在已经确定是mysql 在发出读请求,使用strace 来检查它在读请求什么.

# strace -p 14939

分析:
1,大量的读操作都在不断寻道中,说明mysql 进程产生的是随机IO.
2,看上去似乎是,某一sql 查询导致读操作.

结论:
从以上总结出,所有的读IOPS 都是mysql 进程在执行某些读查询时产生的.

5. 使用mysqladmin 命令,来查找是哪个慢查询导致的.

# ./mysqladmin -pstrongmail processlist

分析:
1,MySQL 数据库里,似乎在不断的运行table update查询.
2,基于这个update 查询,数据库是对所有的table 进行索引.

结论:
从以上总结出,MySQL里这些update 查询问题,都是在尝试对所有table 进行索引.这些产生的读请求正是导致系统性能下降的原因.

后续

把以上这些性能信息移交给了相关开发人员,用于分析他们的PHP 代码.一个开发人员对代码进行了临时性优化.某个查询如果出错了,也最多到100K记录.数据库本身考虑最多存在4百万记录.最后,这个查询不会再给数据库带来负担了.

References
• Ezlot, Phillip – Optimizing Linux Performance, Prentice Hall, Princeton NJ 2005 ISBN – 0131486829
• Johnson, Sandra K., Huizenga, Gerrit – Performance Tuning for Linux Servers, IBM Press, Upper Saddle River NJ 2005 ISBN 013144753X
• Bovet, Daniel Cesati, Marco – Understanding the Linux Kernel, O’Reilly Media, Sebastoppl CA 2006, ISBN 0596005652
• Blum, Richard – Network Performance Open Source Toolkit, Wiley, Indianapolis IN 2003, ISBN 0-471-43301-2
• Understanding Virtual Memory in RedHat 4, Neil Horman, 12/05 http://people.redhat.com/nhorman/papers/rhel4_vm.pdf
• IBM, Inside the Linux Scheduler, http://www.ibm.com/developerworks/linux/library/l-scheduler/
• Aas, Josh, Understanding the Linux 2.6.8.1 CPU Scheduler, http://josh.trancesoftware.com/linux/linux_cpu_scheduler.pdf
• Wieers, Dag, Dstat: Versatile Resource Statistics Tool, http://dag.wieers.com/home-made/dstat/

 

Unix + OS IBM AIX 5L capability optimization nmon

 

http://lindows.iteye.com/admin/blogs/627857

nmon下载地址: 
http://www-941.haw.ibm.com/collaboration/wiki/display/Wikiptype/nmon 
nmon分析工具下载地址: 
http://www-941.haw.ibm.com/collaboration/wiki/display/Wikiptype/nmonanalyser 

1. Nmon
   A IBM tool used to collect tons of system information on AIX/Linux.
   Download Nmon tool from: http://www-941.ibm.com/collaboration/wiki/display/WikiPtype/nmon
   Introduction: http://www.ibm.com/developerworks/cn/aix/library/nmon_analyser/
2. GC Analysers
   IBM GA
   Download GA from: http://www.alphaworks.ibm.com/tech/pmat/download
   Introduction: http://www.alphaworks.ibm.com/tech/pmat
3. IBM Heap Analyzer
   Heap analysis tool for IBM JVM
   Download HA tool from: http://www.alphaworks.ibm.com/tech/heapanalyzer/download
   Introduction: http://www-1.ibm.com/support/docview.wss?rs=180&context=SSEQTP&q1=heapdump+solaris&uid=swg21190608&loc=en_US&cs=utf-8&lang=en

 

http://www.ibm.com/developerworks/wikis/display/Wikiptype/nmonanalyser

http://www.51testing.com/?uid-23978-action-viewspace-itemid-134254

http://www.ibm.com/developerworks/cn/aix/library/nmon_analyser/index.html

http://www.ibm.com/developerworks/cn/aix/library/analyze_aix/index.html

 

developerWorks 中国   >   AIX and UNIX   >

nmon 性能:分析 AIX 和 Linux 性能的免费工具

developerWorks
 

级别: 初级

Nigel Griffiths ([email protected] ), pSeries Technical Support, IBM

2003 年 11 月 04 日
2006 年 6 月 08 日 更新

这 个免费工具使您能够在一个屏幕上查看大量的信息。尽管 IBM 没有提供对该工具的正式支持,并且您在使用它的时候必须自己承担相应的风险,但是您可以从中获得大量有价值的性能统计信息。如果有一个免费工具可以提供您 所需要的所有信息,那么为什么还要使用五个或六个不同的工具呢?
<!-- --><!-- --> <!-- -->

用法说明:这个 nmon 工具并未受到正式支持。没有提供或隐含任何保证,并且您无法从 IBM 获取相关的帮助。

nmon 工具运行于:

  • AIX® 4.1.5、4.2.0、4.3.2 和 4.3.3(nmon Version 9a:该版本的功能已经确定,并且不会对其进行进一步的开发。)
  • AIX 5.1、5.2 和 5.3(nmon Version 10:该版本现在支持 AIX 5.3 和基于 POWER5™ 处理器的计算机,并且提供了 SMT 和共享 CPU 微分区的支持。)
  • pSeries® p5 和 OpenPower™ 上的 Linux™ SUSE SLES 9、Red Hat EL 3 和 4、Debian
  • Linux SUSE、Red Hat 和许多最新的 x86(32 位模式的 Intel 和 AMD)上的发布版
  • zSeries® 或 mainframe 上的 Linux SUSE 和 Red Hat

nmon 工具大约每六个月更新一次,或者在可用的新的操作系统发布版中对其进行更新。要将您的名字放入到请求更新的电子邮件列表中,请与 Nigel Griffiths 联系。

这个工具可以与 nmon 分析程序 一同使用,后者将加载 nmon 的输出文件并自动地创建大量的图形。

引言

nmon 工具可以为 AIX 和 Linux 性能专家提供监视和分析性能数据的功能,其中包括:

  • CPU 使用率
  • 内存使用情况
  • 内核统计信息和运行队列信息
  • 磁盘 I/O 速度、传输和读/写比率
  • 文件系统中的可用空间
  • 磁盘适配器
  • 网络 I/O 速度、传输和读/写比率
  • 页面空间和页面速度
  • CPU 和 AIX 规范
  • 消耗资源最多的进程
  • IBM HTTP Web 缓存
  • 用户自定义的磁盘组
  • 计算机详细信息和资源
  • 异步 I/O,仅适用于 AIX
  • 工作负载管理器 (WLM),仅适用于 AIX
  • IBM TotalStorage® Enterprise Storage Server® (ESS) 磁盘,仅适用于 AIX
  • 网络文件系统 (NFS)
  • 动态 LPAR (DLPAR) 更改,仅适用于面向 AIX 或 Linux 的 pSeries p5 和 OpenPower

还包括一个用来从 nmon 的输出生成图形并创建可以在 Web 站点显示的 .gif 文件的新工具。

有关详细信息,请参阅自述文件。




回页首


该工具的作用

nmon 工具可以帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新。这个高效的工具可以工作于任何哑屏幕、telnet 会话、甚至拨号线路。另外,它并不会消耗大量的 CPU 周期,通常低于百分之二。在更新的计算机上,其 CPU 使用率将低于百分之一。

使用哑屏幕,在屏幕上对数据进行显示,并且每隔两秒钟对其进行更新。然而,您可以很容易地将这个时间间隔更改为更长或更短的时间段。如果您拉伸窗口,并在 X Windows、VNC、PuTTY 或类似的窗口中显示这些数据,nmon 工具可以同时输出大量的信息。

nmon 工具还可以将相同的数据捕获到一个文本文件,便于以后对报告进行分析和绘制图形。输出文件采用电子表格的格式 (.csv)。




回页首


安装该工具

该工具是一个独立的二进制文件(不同的 AIX 或 Linux 版本中该文件也有所不同),您可以在五秒钟内完成该工具的安装,如果您的输入速度更快的话,也许时间更短。安装过程非常简单:

  • nmonXXX.tar.Z 文件复制到计算机。如果使用 FTP,请记住使用二进制模式。
    注意:示例中的 XXX 由实际的版本代替。
  • 要解压该文件,可以运行 uncompress nmonXX.tar.Z
  • 要提取该文件,可以运行 tar xvf nmonXX.tar
  • 阅读自述文件。
  • 要启动 nmon 工具,输入 nmon
  • 如果您是 root 用户,可能需要输入 ./nmon

使用 nmon 9 的附加说明,仅适用于 AIX 4

  1. 必须是 root 用户,或者通过输入下面的命令允许一般用户读取 /dev/kmem 文件(作为 root 用户):
    chmod ugo+r /dev/kmem
  2. 如果您需要磁盘统计信息,还可以运行下面的命令(作为 root 用户):
    chdev -l sys0 -a iostat=true 

如何以交互式的方式运行该工具

要以交互式的方式运行该工具,请阅读该文件前页中的相关提示。然后启动该工具,并使用单键命令来查看您所需要的数据。例如,要获取 CPU内存磁盘 统计信息,启动 nmon 并输入:

cmd

如何在以交互式的方式运行该工具的同时,获取相关的帮助信息

h 键。

附加帮助信息

要获取附加的帮助信息,可以尝试下列方法:

  • 输入 nmon -? 命令以获取简短的详细信息。
  • 输入 nmon -h 命令以获取完整的详细信息。
  • 阅读自述文件。

如何将数据捕获到文件,便于以后进行分析和绘制图形

运行带 -f 标志的 nmon 命令。有关详细信息,请参阅 nmon -h 。但是作为示例,可以尝试运行下面的 nmon 命令,在 1 小时内以 30 秒的时间间隔捕获数据快照:

nmon -f -s 30 -c 120
nmon -fT -s 30 -c 120

第二行的命令还可以捕获消耗资源最多的进程。这两行命令都将在当前目录中创建输出文件,其名称为:

<hostname>_date_time.nmon

该文件采用逗号分隔值 (CSV) 的格式,并且可以将其直接导入到电子表格中。如果您使用的是 Lotus® 1-2-3,那么需要对该文件进行排序。(对于 Excel 版本的 nmon 分析程序,则不需要进行这个操作。)在 AIX 中,请遵循下面的示例:

sort -A mymachine_311201_1030.nmon > xxx.csv

关于如何节省时间的说明:

  • 要将 nmon 数据捕获文件加载到电子表格,可以查看电子表格文档中有关加载 CSV 数据文件 (.csv) 的内容。许多电子表格可以接受该数据,作为可加载的文件之一,或者提供完成这项任务的导入函数。许多电子表格具有固定数目的列和行。我建议您最多收集 300 个快照,这样就可以避免碰上这些问题。
  • 当您将数据捕获到一个文件中时,nmon 将断开与Shell 的连接以确保它能够连续运行,即使您在此过程中执行了注销操作。这意味着 nmon 可能出现故障,即使它仍然在后台运行。要查看该进程是否仍在运行,可以输入:
    ps ?ef | grep nmon
  • 有关您的特定的操作系统上运行的 nmon 版本的详细信息,请阅读自述文件。
  • 面向 AIX 5 的 nmon Version 10 不再使用 /dev/kmem ,仅使用一些公开的 API。因此,您不需要更改 /dev/kmem 的权限,并且不需要使用 32 位和 64 位版本的 nmon
  • 对于 AIX 5.1、5.2 和 5.3,可以使用 nmon 10。
  • 从 ML03 AIX 中开始,不再报告 AIX 5.1 中的 lslpp -Lcq bos.?p 核心转储。另外,在升级到 AIX 5.2 ML5 后,Nigel Griffiths 忽略了 WLM 状态信息,而这些也是 AIX 错误。通过使用 nmon Version 10,可以避免这些问题。
  • 不要使用 Microsoft® Windows® Telnet 和大于 80 x 25 字符的窗口。许多开发人员使用 VNC 和 PuTTY 来显示来自 Windows 计算机的 nmon ,为什么不使用相同的方法呢!



回页首


AIX Version 10 中的 nmon 的新特性

新特性 描述
启动 目前还有一个称为 "nmon" 的小型 Shell 脚本,可以用来启动适当的 nmon 版本。将该脚本和 nmon 二进制文件放入到您的 $PATH 中,然后输入:nmon 。该版本目前仅在 32 位模式下进行了编译。所以,它可以运行于 32 位和 64 位硬件。这是为了使它更容易安装和运行。
N = NFS 对于 nmon 10 来说,NFS 是全新的特性。
p = 分区 (Partitions) 该特性是为了共享 CPU 分区信息,这是 p5/AIX5.3 的重要特性。
C = CPU 这是为了支持使用 32 个以上 CPU 的计算机,最多可以根据需要达到 128 个逻辑 CPU。
c = CPU 如果您在 POWER5 上使用 AIX 5.3,并且处于共享 CPU 环境中,那么该特性可以提供关于物理 CPU 使用的详细信息。
S = 子类 (Subclass) 该特性根据要求表示 WLM 的子类。
a = 磁盘适配器 (Disk adapters) 提供磁盘适配器的详细信息,比如它们的完整类型。
r = 资源 (Resources) 其中包括以 MHz 为单位的 CPU 速度。
k = 内核 (Kernel) 提供了一些新的字段。
L = 大型页面 (Large pages) 提供了大型页面的状态信息,适用于追求高性能的用户。
D = 磁盘 (Disk) 提供关于磁盘、磁盘类型大小、可用空间、卷组、适配器等更详细的信息。
n = 网络 (Network) 提供关于网络适配器、MTU 和相关错误的详细信息。
m = 内存 (Memory) 提供内存使用的更详细的信息,如系统(内核)和进程、活动虚拟内存。
-B 这是移除封装的启动选项。



回页首


AIX 5 的 nmon 10 的输出示例

图 1 是屏幕输出的示例。它显示了 AIX 5 的起始屏幕,以及大量有价值的信息。


图 1. AIX 5 的 nmon 10 的输出示例
OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第1张图片

图 2 说明了关于 CPU(这里是 4 CPU 的 POWER5 计算机,并打开了 SMT)、内存使用、内核内部统计和磁盘统计的详细信息。注意:这个逻辑分区 (LPAR) 占用了一半 CPU 中其授权值的 6 倍。


图 2. CPU 详细信息
OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第2张图片

图 3 显示了网络、NFS 统计信息和日志文件系统使用的详细信息。


图 3. 网络详细信息
OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第3张图片

在下面的图 4 中显示了 POWER5 共享处理器微分区统计的详细信息。


图 4. LPAR 详细信息
OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第4张图片

图 5 说明了 Linux 版本的 nmon 的详细信息,其中显示了 CPU(这里是 2 CPU 的 POWER5 计算机,并打开了 SMT)、LPAR 统计、内存使用、网络统计、文件系统使用和磁盘统计的详细信息。注意:该 LPAR 的物理 CPU 仅在 SUSE SLES9 Service Pack 1 和 Red Hat EL 4 Update 1 中是可用的。


图 5. nmon 的 Linux 版本
OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第5张图片

图 6 显示了计算机、磁盘统计(详细模式)和主要进程的操作系统详细信息。


图 6. nmon 的 Linux 版本(续)
OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第6张图片


回页首


获取该工具

下面是可用的下载选择:



参考资料



关于作者

 

Nigel Griffiths 是 IBM eServer pSeries Technical Support Advanced Technology Group 的成员。他是一位性能、规模调整、基准测试和 Oracle RDBMS 方面的专家。nmon 工具设计原本用来为内部使用提供基准测试和性能优化的支持,但应大家的要求分发给了需要帮助的伙伴。您可以通过 [email protected] 与 Nigel 联系。

 

end

 

学会使用Linux性能分析工具

http://blackdot.blog.51cto.com/84/801

  Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。
  在Linux下有很多系统性能分析工具,比较常见的有top、free、ps、time、timex、uptime等。下文将介绍几个较为重要的性能分析工具vmstat、iostat和sar及其使用。

  用vmstat监视内存使用情况

  vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

  vmstat的语法如下:

  vmstat [-V] [-n] [delay [count]]



  其中,-V表示打印出版本信息;-n表示在周期性循环输出时,输出的头部信息仅显示一次;delay是两次输出之间的延迟时间;count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义,可运行man vmstat查看。

  用iostat监视I/O子系统情况

   iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

  iostat的语法如下:

iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval  [ count ] ]



   其中,-c为汇报CPU的使用情况;-d为汇报磁盘的使用情况;-k表示每秒按kilobytes字节显示数据;-t为打印汇报的时间;-v表示打印出 版本信息和用法;-x device指定要统计的设备名称,默认为所有的设备;interval指每次统计间隔的时间;count指按照这个时间间隔统计的次数。

  iostat一般的输出格式如下:

Linux 2.4.18-18smp (builder.linux.com)  2003年03月07日

avg-cpu:  %user   %nice    %sys   %idle
           4.81    0.01    1.03   94.15

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
dev3-0           30.31      1117.68       846.52   16104536   12197374
dev3-1            7.06       229.61        40.40    3308486     582080



  对于输出中各字段的含义,iostat的帮助中有详细的说明。

  使用sar进行综合分析

  表1 sar参数说明

  选项 功能

  -A 汇总所有的报告

  -a 报告文件读写使用情况

  -B 报告附加的缓存的使用情况

  -b 报告缓存的使用情况

  -c 报告系统调用的使用情况

  -d 报告磁盘的使用情况

  -g 报告串口的使用情况

  -h 报告关于buffer使用的统计数据

  -m 报告IPC消息队列和信号量的使用情况

  -n 报告命名cache的使用情况

  -p 报告调页活动的使用情况

  -q 报告运行队列和交换队列的平均长度

  -R 报告进程的活动情况

  -r 报告没有使用的内存页面和硬盘块

  -u 报告CPU的利用率

  -v 报告进程、i节点、文件和锁表状态

  -w 报告系统交换活动状况

  -y 报告TTY设备活动状况



   sar是System Activity Reporter(系统活动情况报告)的缩写。顾名思义,sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的 特点是可以连续对系统取样,获得大量的取样数据;取样数据和分析的结果都可以存入文件,所需的负载很小。sar是目前Linux上最为全面的系统性能分析 工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的 活动等,使用也是较为复杂。

  sar的语法如下:

sar [-option] [-o file] t [n]



  它的含义是每隔t秒取样一次,共取样n次。其中-o file表示取样结果将以二进制形式存入文件file中。

  另一种语法如下:

sar [-option] [-s time] [-e time] [-i sec] [-f file]



   含义是表示从file文件中取出数据,如果没有指定-f file,则从标准数据文件/var/adm/sa/sadd取数据,其中dd表示当前天。另外,-s time表示起始时间;-e time表示停止时间;-i sec表示取样的时间间隔,如果不指定则表示取文件中所有的数据。对于具体的选项参见表1。

  一般它与-q和-u联合使用,以便对每个CPU的使用情况进行分析,比如运行如下命令:

sar  -q -u 5 1



  将输出如下:

Linux 2.4.18-18smp (builder.linux.com) 	2003年03月07日

09时46分16?      CPU     %user     %nice   %system     %idle
09时46分21?      all      0.20      0.00      0.00     99.80

09时46分16?  runq-sz  plist-sz   ldavg-1   ldavg-5
09时46分21?        0        91      0.00      0.00

Average:          CPU     %user     %nice   %system     %idle
Average:          all      0.20      0.00      0.00     99.80

Average:      runq-sz  plist-sz   ldavg-1   ldavg-5
Average:            0        91      0.00      0.00



  由于sar命令太复杂,只有通过熟练使用才能了解每个选项的含义,对于sar输出中每个字段的含义运行man sar命令可以得到详细的解释。

如何分析linux系统瓶颈

http://hi.baidu.com/xuleit/blog/item/85b7391227b2e35bf919b810.html

性能分析之步骤

1. 首先使用vmstat 查看大致的系统性能情况:

# vmstat 1 10

分析:
1,不会是内存不足导致,因为swapping 始终没变化(si 和 so).尽管空闲内存不多(free),但swpd 也没有变化.
2,CPU 方面也没有太大问题,尽管有一些运行队列(procs r),但处理器还始终有50% 多的idle(CPU id).
3,有太多的上下文切换(cs)以及disk block从RAM中被读入(bo).
4,CPU 还有平均20% 的I/O 等待情况.

结论:
从以上总结出,这是一个I/O 瓶颈.

2. 然后使用iostat 检查是谁在发出IO 请求:

# iostat -x 1

分析:
1,看上去只有/dev/sda3 分区很活跃,其他分区都很空闲.
2,差不多有1200 读IOPS,磁盘本身是支持200 IOPS左右(译注:参考之前的IOPS 计算公式).
3,有超过2秒,实际上没有一个读磁盘(rkb/s).这和在vmstat 看到有大量I/O wait是有关系的.
4,大量的read IOPS(r/s)和在vmstat 中大量的上下文是匹配的.这说明很多读操作都是失败的.

结论:
从以上总结出,部分应用程序带来的读请求,已经超出了I/O 子系统可处理的范围.

3. 使用top 来查找系统最活跃的应用程序

# top -d 1

分析:
1,占用资源最多的好像就是mysql 进程,其他都处于完全idle 状态.
2,在top(wa) 看到的数值,和在vmstat 看到的wio 数值是有关联的.

结论:
从以上总结出,似乎就只有mysql 进程在请求资源,因此可以推论它就是导致问题的关键.

4. 现在已经确定是mysql 在发出读请求,使用strace 来检查它在读请求什么.

# strace -p 14939

分析:
1,大量的读操作都在不断寻道中,说明mysql 进程产生的是随机IO.
2,看上去似乎是,某一sql 查询导致读操作.

结论:
从以上总结出,所有的读IOPS 都是mysql 进程在执行某些读查询时产生的.

5. 使用mysqladmin 命令,来查找是哪个慢查询导致的.

# ./mysqladmin -pstrongmail processlist

分析:
1,MySQL 数据库里,似乎在不断的运行table update查询.
2,基于这个update 查询,数据库是对所有的table 进行索引.

结论:
从以上总结出,MySQL里这些update 查询问题,都是在尝试对所有table 进行索引.这些产生的读请求正是导致系统性能下降的原因.

后续

把以上这些性能信息移交给了相关开发人员,用于分析他们的PHP 代码.一个开发人员对代码进行了临时性优化.某个查询如果出错了,也最多到100K记录.数据库本身考虑最多存在4百万记录.最后,这个查询不会再给数据库带来负担了.

References
• Ezlot, Phillip – Optimizing Linux Performance, Prentice Hall, Princeton NJ 2005 ISBN – 0131486829
• Johnson, Sandra K., Huizenga, Gerrit – Performance Tuning for Linux Servers, IBM Press, Upper Saddle River NJ 2005 ISBN 013144753X
• Bovet, Daniel Cesati, Marco – Understanding the Linux Kernel, O’Reilly Media, Sebastoppl CA 2006, ISBN 0596005652
• Blum, Richard – Network Performance Open Source Toolkit, Wiley, Indianapolis IN 2003, ISBN 0-471-43301-2
• Understanding Virtual Memory in RedHat 4, Neil Horman, 12/05 http://people.redhat.com/nhorman/papers/rhel4_vm.pdf
• IBM, Inside the Linux Scheduler, http://www.ibm.com/developerworks/linux/library/l-scheduler/
• Aas, Josh, Understanding the Linux 2.6.8.1 CPU Scheduler, http://josh.trancesoftware.com/linux/linux_cpu_scheduler.pdf
• Wieers, Dag, Dstat: Versatile Resource Statistics Tool, http://dag.wieers.com/home-made/dstat/

 

Linux性能分析与调整命令汇总

http://www.bitscn.com/os/linux/201009/190744.html

Linux几个性能监控命令行工具

linux htop、dstat 、iftop

http://www.wisfern.com/201101/524.html

 

CPU性能分析工具:

vmstat

ps

sar

time

strace

pstree

CPU性能调优工具:

nice / renic

sysctl

top常用 命令

 

http://rainbird.blog.51cto.com/211214/109310
c 显示完整的命令行
u 查找指定用户进程
k 杀死指定pid进程
r 改变优先级
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。

Linux的load average的含义

http://www.51testing.com/?uid-116228-action-viewspace-itemid-131213

[root@b2cbbs opt]# uptime
 19:06:26 up 65 days, 58 min,  1 user,  load average: 0.44, 0.44, 0.45
[root@b2cbbs opt]# top
top - 19:06:29 up 65 days, 58 min,  1 user,  load average: 0.40, 0.43, 0.45

上面的输出,load average后面分别是1分钟、5分钟、15分钟的负载情况。

数据是每隔5秒钟检查一次活跃的进程数,然后根据这个数值算出来的。

如果这个数除以CPU的数目,结果高于5的时候就表明系统在超负荷运转了。

其算法(摘自Linux 2.4的内核代码)如下:
文件: include/linux/sched.h:

文件: kernel/timer.c:

文件: fs/proc/proc_misc.c:

CPU利用率和Load Average的区别

http://www.51testing.com/?uid-116228-action-viewspace-itemid-131214

      压 力测试不仅需要对业务场景的并发用户等压力参数作模拟,同时也需要在压力测试过程中随时关注机器的性能情况,来确保压力测试的有效性。当服务器长期处于一 种超负荷的情况下运行,所能接收的压力并不是我们所认为的可接受的压力。就好比项目经理在给一个人估工作量的时候,每天都让这个人工作 12个小时,那么所制定的项目计划就不是一个合理的计划,那个人迟早会垮掉,而影响整体的项目进度。

CPU利用率在过去常常被我们这些外行认为是判断机器是否已经到了满负荷的一个标准,看到 50%-60%的使用率就认为机器就已经压到了临界了。 CPU利用率,顾名思义就是对于 CPU的使用状况,这是对一个时间段内 CPU使用状况的统计,通过这个指标可以看出在某一个时间段内 CPU被占用的情况,如果被占用时间很高,那么就需要考虑 CPU是否已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将 CPU的利用率控制在一定的比例下,以保证机器的正常运作。

Load Average CPU Load,它所包含的信息不是 CPU的使用率状况,而是在一段时间内 CPU正在处理以及等待 CPU处理的进程数之和的统计信息,也就是 CPU使用队列的长度的统计信息。为什么要统计这个信息,这个信息的对于压力测试的影响究竟是怎么样的,那就通过一个类比来解释 CPU利用率和 Load Average的区别以及对于压力测试的指导意义。

我们将 CPU就类比为电话亭,每一个进程都是一个需要打电话的人。现在一共有 4个电话亭(就好比我们的机器有 4核),有 10个人需要打电话。现在使用电话的规则是管理员会按照顺序给每一个人轮流分配 1分钟的使用电话时间,如果使用者在 1分钟内使用完毕,那么可以立刻将电话使用权返还给管理员,如果到了 1分钟电话使用者还没有使用完毕,那么需要重新排队,等待再次分配使用。

补充几点:

1.对于 CPU利用率和 CPU Load Average的结果来判断性能问题。首先低 CPU利用率不表明 CPU不是瓶颈,竞争 CPU的队列长期保持较长也是 CPU超负荷的一种表现。对于应用来说可能会去花时间在 I/O,Socket等方面,那么可以考虑是否后这些硬件的速度影响了整体的效率。

这里最好的样板范例就是我在测试中发现的一个现象: SIP当前在处理过程中,为了提高处理效率,将控制策略以及计数信息都放置在 Memcached Cache里面,当我将 Memcached Cache配置扩容一倍以后, CPU的利用率以及 Load都有所下降,其实也就是在处理任务的过程中,等待 Socket的返回对于 CPU的竞争也产生了影响。

2.未来多 CPU编程的重要性。现在服务器的 CPU都是多 CPU了,我们的服务器处理能力已经不再按照摩尔定律来发展。就我上面提到的电话亭场景来看,对于三种不同时间需求的用户来说,采用不同的分配顺序,我们可看到的 Load Average就会有不同。假设我们统计 Load的时间段为 2分钟,如果将电话分配的顺序按照: 1min的用户, 2min的用户, 3min的用户来分配,那么我们的 Load Average将会最低,采用其他顺序将会有不同的结果。所以未来的多 CPU编程可以更好的提高 CPU的利用率,让程序跑的更快。

以上所提到的内容未必都是很准确或者正确,如果有任何的偏差也请大家指出,可以纠正一些不清楚的概念。

理解 Linux 的处理器负载均值

http://jayjayjays.iteye.com/blog/621050

http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

Memory性能分析工具:

vmstat

strace

top

ipcs

ipcrm

cat /proc/meminfo

cat /proc/slabinfo

cat /proc/ /maps

RHEL Server 5如何扩大tmpfs文件系统?

http://bbs.chinaunix.net/viewthread.php?tid=2105252

[root@appstage ~]# mount tmpfs /dev/shm -t tmpfs -o size=2g

Memory性能调优工具:

 

swapon

ulimit

sysctl

I/O性能分析工具:

vmstat

ipstat

repquota

quotacheck

Network性能分析工具:

ifconfig

ethereal

tethereal

iptraf

使用iptraf查看TCP/UDP某个特定端口的带宽与流量 http://www.ha97.com/4806.html

http://www.redhat.com/search?q=iptraf&search_submit=&lr=lang_en&sitesearch=www.redhat.com&hl=en&site=redhat&btnG=Search&client=external&output=xml_no_dtd&proxyreload=1&exclude_apps=1&rwhost=true&ie=utf8&oe=utf8

ftp://metalab.unc.edu/pub/Linux/system/network/monitor/iptraf-2.3.1.tar.gz

ftp://metalab.unc.edu/pub/Linux/system/network/monitor/iptraf-2.4.0.tar.gz

iwconfig

nfsstat

mrtg

ntop

netstat

cat /proc/sys/net

Network性能调优工具:

 

ifconfig

iwconfig

sysctl

I/O性能 分析 工具:

 

I/O性能调优工具:

 

edquota

quoton

sysctl

boot line:

elevator=

CPU性能调整

当一个系统的CPU空闲时间或者等待时间小于5%时,我们就可以认为系统的CPU资源耗尽,我们应该对CPU进行性能调整。

CPU性能调整方法:

编辑/proc/sys/kernel/中的文件,修改内核参数。

#cd /proc/sys/kernel/

# ls /proc/sys/kernel/

acct hotplug panic real-root-dev

cad_pid modprobe panic_on_oops sem

cap-bound msgmax pid_max shmall

core_pattern msgmnb powersave-nap shmmax

core_uses_pid msgmni print-fatal-signals shmmni

ctrl-alt-del ngroups_max printk suid_dumpable

domainname osrelease printk_ratelimit sysrq

exec-shield ostype printk_ratelimit_burst tainted

exec-shield-randomize overflowgid pty threads-max

hostname overflowuid random version

一般可能需要编辑的是pid_max和threads-max,如下:

# sysctl kernel.threads-max

kernel.threads-max = 8192

# sysctl kernel.threads-max=10000

kernel.threads-max = 10000

Memory性能调整

当一个应用系统的内存资源出现下面的情况时,我们认为需要进行Memory性能调整:

页面频繁换进换出;

缺少非活动页。

例如在使用vmstat命令时发现,memory的cache使用率非常低,而swap的si或者so则有比较高的数据值时,应该警惕内存的性能问题。

Memory性能调整方法:

1。关闭非核心的服务进程。

相关的方法请见CPU性能调整部分。

2。修改/proc/sys/vm/下的系统参数。

# ls /proc/sys/vm/

block_dump laptop_mode nr_pdflush_threads

dirty_background_ratio legacy_va_layout overcommit_memory

dirty_expire_centisecs lower_zone_protection overcommit_ratio

dirty_ratio max_map_count page-cluster

dirty_writeback_centisecs min_free_kbytes swappiness

hugetlb_shm_group nr_hugepages vfs_cache_pressure

# sysctl vm.min_free_kbytes

vm.min_free_kbytes = 1024

# sysctl -w vm.min_free_kbytes=2508

vm.min_free_kbytes = 2508

# cat /etc/sysctl.conf

vm.min_free_kbytes=2058

linux sysctl.conf中相关重要设定的详细说明

http://www.jiunile.com/linux-sysctl-conf%e4%b8%ad%e7%9b%b8%e5%85%b3%e9%87%8d%e8%a6%81%e8%ae%be%e5%ae%9a%e7%9a%84%e8%af%a6%e7%bb%86%e8%af%b4%e6%98%8e.html

3。配置系统的swap交换分区等于或者2倍于物理内存。

# free

total used free shared buffers cached

Mem: 987656 970240 17416 0 63324 742400

-/+ buffers/cache: 164516 823140

Swap: 1998840 150272 1848568

I/O性能调整

系统出现以下情况时,我们认为该系统存在I/O性能问题:

系统等待I/O的时间超过50%;

一个设备的平均队列长度大于5。

我们可以通过诸如vmstat等命令,查看CPU的wa等待时间,以得到系统是否存在I/O性能问题的准确信息。

I/O性能调整方法:

1。修改I/O调度算法。

Linux已知的I/O调试算法有4种:

deadline – Deadline I/O scheduler

as – Anticipatory I/O scheduler

cfq – Complete Fair Queuing scheduler

noop – Noop I/O scheduler

可以编辑/etc/yaboot.conf文件修改参数elevator得到。

# vi /etc/yaboot.conf

image=/vmlinuz-2.6.9-11.EL

label=linux

read-only

initrd=/initrd-2.6.9-11.EL.img

root=/dev/VolGroup00/LogVol00

append=”elevator=cfq rhgb quiet”

2。文件系统调整。

对于文件系统的调整,有几个公认的准则:

将I/O负载相对平均的分配到所有可用的磁盘上;

选择合适的文件系统,Linux内核支持reiserfs、ext2、ext3、jfs、xfs等文件系统;

# mkfs -t reiserfs -j /dev/sdc1

文件系统即使在建立后,本身也可以通过命令调优;

tune2fs (ext2/ext3)

reiserfstune (reiserfs)

jfs_tune (jfs)

3。文件系统Mount时可加入选项noatime、nodiratime。

# vi /etc/fstab

/dev/sdb1 /backup reiserfs acl, user_xattr, noatime, nodiratime 1 1

4。调整块设备的READAHEAD,调大RA值。

[root@overflowuid ~]# blockdev –report

RO RA SSZ BSZ StartSec Size Device

rw 256 512 4096 0 71096640 /dev/sdb

rw 256 512 4096 32 71094240 /dev/sdb1

[root@overflowuid ~]# blockdev –setra 2048 /dev/sdb1

[root@overflowuid ~]# blockdev –report

RO RA SSZ BSZ StartSec Size Device

rw 2048 512 4096 0 71096640 /dev/sdb

rw 2048 512 4096 32 71094240 /dev/sdb1

Network性能调整

一个应用系统出现如下情况时,我们认为该系统存在网络性能问题:

网络接口的吞吐量小于期望值;

出现大量的丢包现象;

出现大量的冲突现象。

Network性能调整方法:

1。调整网卡的参数。

# ethtool eth0

Settings for eth0:

Supported ports: [ TP ]

Supported link modes: 10baseT/Half 10baseT/Full

100baseT/Half 100baseT/Full

1000baseT/Full

Supports auto-negotiation: Yes

Advertised link modes: 10baseT/Half 10baseT/Full

100baseT/Half 100baseT/Full

1000baseT/Full

Advertised auto-negotiation: Yes

Speed: 100Mb/s

Duplex: Half

Port: Twisted Pair

PHYAD: 0

Transceiver: internal

Auto-negotiation: on

Supports Wake-on: d

Wake-on: d

Current message level: 0×00000007 (7)

Link detected: yes

#ethtool -s eth0 duplex full

#ifconfig eth0 mtu 9000 up

2。增加网络缓冲区和包的队列。

# cat /proc/sys/net/ipv4/tcp_mem

196608 262144 393216

# cat /proc/sys/net/core/rmem_default

135168

# cat /proc/sys/net/core/rmem_max

131071

# cat /proc/sys/net/core/wmem_default

135168

# cat /proc/sys/net/core/wmem_max

131071

# cat /proc/sys/net/core/optmem_max

20480

# cat /proc/sys/net/core/netdev_max_backlog

300

# sysctl net.core.rmem_max

net.core.rmem_max = 131071

# sysctl -w net.core.rmem_max=135168

net.core.rmem_max = 135168

3。调整Webserving。

# sysctl net.ipv4.tcp_tw_reuse

net.ipv4.tcp_tw_reuse = 0

# sysctl -w net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_tw_reuse = 1

# sysctl net.ipv4.tcp_tw_recycle

net.ipv4.tcp_tw_recycle = 0

# sysctl -w net.ipv4.tcp_tw_recycle=1

net.ipv4.tcp_tw_recycle = 1

 

linux sysctl.conf中相关重要设定的详细说明

http://www.jiunile.com/linux-sysctl-conf%e4%b8%ad%e7%9b%b8%e5%85%b3%e9%87%8d%e8%a6%81%e8%ae%be%e5%ae%9a%e7%9a%84%e8%af%a6%e7%bb%86%e8%af%b4%e6%98%8e.html

 

$ /proc/sys/net/core/wmem_max
最大socket写buffer,可参考的优化值:873200
$ /proc/sys/net/core/rmem_max
最大socket读buffer,可参考的优化值:873200
$ /proc/sys/net/ipv4/tcp_wmem
TCP写buffer,可参考的优化值: 8192 436600 873200
$ /proc/sys/net/ipv4/tcp_rmem
TCP读buffer,可参考的优化值: 32768 436600 873200
$ /proc/sys/net/ipv4/tcp_mem
同样有3个值,意思是:
net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力.
net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段.
net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket.
上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864
$ /proc/sys/net/core/netdev_max_backlog
进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000.
$ /proc/sys/net/core/somaxconn
listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.可调整到256.
$ /proc/sys/net/core/optmem_max
socket buffer的最大初始化值,默认10K.
$ /proc/sys/net/ipv4/tcp_max_syn_backlog
进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.可调整到2048.
$ /proc/sys/net/ipv4/tcp_retries2
TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,以尽早释放内核资源.
$ /proc/sys/net/ipv4/tcp_keepalive_time
$ /proc/sys/net/ipv4/tcp_keepalive_intvl
$ /proc/sys/net/ipv4/tcp_keepalive_probes
这3个参数与TCP KeepAlive有关.默认值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
$ proc/sys/net/ipv4/ip_local_port_range
指定端口范围的一个配置,默认是32768 61000,已够大.
net.ipv4.tcp_syncookies = 1
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1
表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000
表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000
表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改 为 5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数 可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

 

Ext4,Ext3的特点和区别

http://zxboom.iteye.com/blog/383986

            Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4。 Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只是增加了一个日志功能而已。Ext4 可以提供更佳的性能和可靠性,还有更为丰富的功能:
1. 与 Ext3 兼容。 执行若干条命令,就能从 Ext3 在线迁移到 Ext4,而无须重新格式化磁盘或重新安装系统。原有 Ext3 数据结构照样保留,Ext4 作用于新数据,当然,整个文件系统因此也就获得了 Ext4 所支持的更大容量。

2. 更大的文件系统和更大的文件。 较之 Ext3 目前所支持的最大 16TB 文件系统和最大 2TB 文件,Ext4 分别支持 1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系统,以及 16TB 的文件。

3. 无限数量的子目录。 Ext3 目前只支持 32,000 个子目录,而 Ext4 支持无限数量的子目录。

4. Extents。 Ext3 采用间接块映射,当操作大文件时,效率极其低下。比如一个 100MB 大小的文件,在 Ext3 中要建立 25,600 个数据块(每个数据块大小为 4KB)的映射表。而 Ext4 引入了现代文件系统中流行的 extents 概念,每个 extent 为一组连续的数据块,上述文件则表示为“该文件数据保存在接下来的 25,600 个数据块中”,提高了不少效率。

5. 多块分配。 当 写入数据到 Ext3 文件系统中时,Ext3 的数据块分配器每次只能分配一个 4KB 的块,写一个 100MB 文件就要调用 25,600 次数据块分配器,而 Ext4 的多块分配器“multiblock allocator”(mballoc) 支持一次调用分配多个数据块。

6. 延迟分配。 Ext3 的数据块分配策略是尽快分配,而 Ext4 和其它现代文件操作系统的策略是尽可能地延迟分配,直到文件在 cache 中写完才开始分配数据块并写入磁盘,这样就能优化整个文件的数据块分配,与前两种特性搭配起来可以显著提升性能。

7. 快速 fsck。 以前执行 fsck 第一步就会很慢,因为它要检查所有的 inode,现在 Ext4 给每个组的 inode 表中都添加了一份未使用 inode 的列表,今后 fsck Ext4 文件系统就可以跳过它们而只去检查那些在用的 inode 了。

8. 日志校验。 日志是最常用的部分,也极易导致磁盘硬件故障,而从损坏的日志中恢复数据会导致更多的数据损坏。Ext4 的日志校验功能可以很方便地判断日志数据是否损坏,而且它将 Ext3 的两阶段日志机制合并成一个阶段,在增加安全性的同时提高了性能。

9. “无日志”(No Journaling)模式。 日志总归有一些开销,Ext4 允许关闭日志,以便某些有特殊需求的用户可以借此提升性能。

10. 在线碎片整理。 尽管延迟分配、多块分配和 extents 能有效减少文件系统碎片,但碎片还是不可避免会产生。Ext4 支持在线碎片整理,并将提供 e4defrag 工具进行个别文件或整个文件系统的碎片整理。

11. inode 相关特性。 Ext4 支持更大的 inode,较之 Ext3 默认的 inode 大小 128 字节,Ext4 为了在 inode 中容纳更多的扩展属性(如纳秒时间戳或 inode 版本),默认 inode 大小为 256 字节。Ext4 还支持快速扩展属性(fast extended attributes)和 inode 保留(inodes reservation)。

12. 持久预分配(Persistent preallocation)。 P2P 软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4 在文件系统层面实现了持久预分配并提供相应的 API(libc 中的 posix_fallocate()),比应用软件自己实现更有效率。

13. 默认启用 barrier。 磁 盘上配有内部缓存,以便重新调整批量数据的写操作顺序,优化写入性能,因此文件系统必须在日志数据写入磁盘之后才能写 commit 记录,若 commit 记录写入在先,而日志有可能损坏,那么就会影响数据完整性。Ext4 默认启用 barrier,只有当 barrier 之前的数据全部写入磁盘,才能写 barrier 之后的数据。(可通过 "mount -o barrier=0" 命令禁用该特性。)


Ext4 随 Linux kernel 2.6.28 正式发布已有数周,一直苦于找不到测试用的磁盘,正巧年前 Intel 送来几块 SSD 测试样品,这两天就顺带把 SSD 也测了。测试所使用的 Linux 内核版本为 2.6.28.2,测试工具为 IOzone 3.318。

IOzone 测试命令为:

time /opt/iozone/bin/iozone -a -s 4G -q 256 -y 4 >|/root/ext4-iozone-stdout.txt


上述命令的说明如下:

Auto Mode
File size set to 4194304 KB
Using Maximum Record Size 256 KB
Using Minimum Record Size 4 KB
Command line used: /opt/iozone/bin/iozone -a -s 4G -q 256 -y 4
Output is in Kbytes/sec
Time Resolution = 0.000001 seconds.
Processor cache size set to 1024 Kbytes.
Processor cache line size set to 32 bytes.
File stride size set to 17 * record size.


测试结果除了表明 Intel SSD 的读写速度快得令人咋舌之外,还可以说明 Ext4 的各方面性能都超过了上一代 Ext3,甚至在大多数情况下,比没有日志功能的 Ext2 还要快出不少:

<!-- TABLE,THEAD,TBODY,TFOOT,TR,TH,TD { font-family:"Arial"; font-size:x-small } -->
  reclen write rewrite read reread random read random write bkwd read record rewrite stride read fwrite frewrite fread freread
Ext2

real 28m12.718s
user 0m10.725s
sys 5m8.265s
4 218,680 216,596 630,248 245,802 88,700 138,065 106,112 1,882,623 73,538 214,175 218,364 566,570 247,381
8 215,308 218,690 556,064 246,260 154,680 150,052 188,397 2,462,367 130,896 217,157 216,647 583,808 248,397
16 216,457 216,843 575,046 245,701 258,660 158,750 306,842 2,654,320 220,939 216,061 218,140 598,174 246,581
32 217,925 214,289 537,976 243,081 394,013 167,002 464,240 2,397,831 340,775 217,434 219,353 583,463 246,341
64 215,460 219,256 527,919 244,362 503,227 162,917 609,546 2,546,079 456,243 216,875 217,692 571,707 244,264
128 219,081 216,173 540,831 242,526 609,750 161,442 721,701 2,656,729 551,122 217,780 217,427 579,271 242,291
256 216,091 217,631 565,111 245,157 654,274 173,955 870,547 2,574,261 634,835 216,638 219,693 563,735 247,101
Ext3

real 27m42.449s
user 0m11.529s
sys 7m17.049s
4 218,242 213,039 482,132 243,986 88,007 156,926 105,557 1,540,739 75,010 216,028 216,432 522,704 243,385
8 218,390 217,915 544,892 244,979 152,424 190,454 181,486 1,945,603 130,737 218,364 216,431 530,853 243,222
16 218,083 217,683 561,038 244,506 255,244 200,032 300,212 2,096,495 221,329 216,930 216,661 514,177 244,069
32 216,258 217,013 569,246 243,811 389,745 198,275 446,462 1,934,853 338,785 216,809 219,296 530,634 243,446
64 218,850 217,711 577,529 243,725 497,689 201,693 589,535 2,036,412 450,449 219,387 214,900 514,353 244,809
128 220,234 215,687 530,519 241,615 608,244 199,619 714,295 1,992,168 553,022 217,828 218,454 513,596 241,510
256 216,011 220,188 592,578 242,548 642,341 199,408 834,240 2,092,959 624,043 217,682 218,165 529,358 242,878
Ext4

real 27m3.485s
user 0m10.847s
sys 6m9.578s
4 221,823 216,992 532,488 273,668 85,210 183,195 103,036 1,862,817 74,781 225,841 220,620 523,799 272,848
8 226,028 218,580 561,960 272,036 154,972 216,505 178,482 2,135,372 132,506 227,423 215,766 641,021 271,328
16 222,241 217,746 547,548 270,895 260,899 223,895 295,288 2,095,966 223,135 226,055 216,210 621,287 273,475
32 220,121 213,025 240,426 247,628 345,210 175,977 451,631 2,145,351 342,236 225,796 213,427 598,331 269,759
64 223,983 214,437 308,696 551,577 754,941 225,897 523,130 2,218,016 448,086 227,030 214,706 582,795 272,323
128 222,576 217,816 624,636 271,293 644,500 224,997 720,468 2,308,315 582,943 225,971 217,373 552,335 274,237
256 221,202 222,238 541,685 270,898 671,748 228,085 845,494 2,215,381 643,715 225,411 219,166 580,066 273,342
                   

 

ext4  文件系统 新特性

http://kernelnewbies.org/Ext4

http://jackyrong.iteye.com/blog/734107

http://linux.chinaunix.net/bbs/thread-1059437-1-1.html

Ext4

Ext4 is part of the Linux 2.6.28 kernel, read the previous link to know more details about that release.

  1. Introduction
  2. EXT4 features
    1. Compatibility
    2. Bigger filesystem/file sizes
    3. Sub directory scalability
    4. Extents
    5. Multiblock allocation
    6. Delayed allocation
    7. Fast fsck
    8. Journal checksumming
    9. "No Journaling" mode
    10. Online defragmentation
    11. Inode-related features
    12. Persistent preallocation
    13. Barriers on by default
  3. How to use Ext4
    1. Creating a new Ext4 filesystem from the scratch
    2. Migrate existing Ext3 filesystems to Ext4
    3. Mount an existing Ext3 filesystem with Ext4 without changing the format

 

Linux network monitor iptraf

http://www.ha97.com/4806.html

使用iptraf查看TCP/UDP某个特定端口的带宽与流量 http://www.ha97.com/4806.html

http://www.redhat.com/search?q=iptraf&search_submit=&lr=lang_en&sitesearch=www.redhat.com&hl=en&site=redhat&btnG=Search&client=external&output=xml_no_dtd&proxyreload=1&exclude_apps=1&rwhost=true&ie=utf8&oe=utf8

PS:今天有个做Linux开发的哥们问我怎么查看某个端口的流量,我之前还真很少查看某个端口的流量,都习惯查看某个网卡的流量。不过想了一下,这个肯定是可以的。马上想起我经常使用的iptraf工具,折腾了几分钟,方法如下,很简单:

1、终端里打开iptraf(没安装的自己安装,官方源有),选择 Configure —— Additional ports,然后输入端口范围,如果查看22,就输入22 —— 22,之后退出iptraf,如图所示:
OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第7张图片

OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第8张图片

2、重新打开iptraf,选择 Statistical breakdowns —— By TCP/UDP port —— eth0,这样就可以查看eth0网卡的某个指定端口的带宽占用和流量了。如图所示:
OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第9张图片

OS + Linux performance tools / cpu / mem / io / net / fiIe / Intel VTune_第10张图片

: http://www.ha97.com/4806.html

 

 

end

你可能感兴趣的:(linux,unix,OS,IBM,AIX)