调优监控

1 独占你的测试机器

包括跑JMeter的那些机器。

"top"或者"pidstat -l 2 10" 看一下,其他的路人甲乙丙丁的应用都关干净了没。

如果是云主机,确保百分百占有宿主机的资源,或者深夜大家下班了你在家连VPN回来跑。

 

2 了解你的测试机器

必须完完全全的了解你的机器,才知道有没卡在某个瓶颈,或者与线上环境、其他测试结果的比较。

还是那句, 包括跑JMeter的那些机器。

 

2.1 CPU

"cat /proc/cpuinfo", 看最后一条就好,比如

 

processor : 23
model name : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz
physical id : 1
cpu cores : 6

所有数字都从零开始,physical id:1即两颗cpu, cpu core: 6即6核,processor : 23即24个处理器。

 

2 CPU * 6 Core * 2HT(Intel超线程技术) = 24 Processor

不过也有很多同事喜欢说24核,也懒得纠正了。

 

2.2 内存

"free -h" 没什么好说的。

 

2.3 硬盘
  • 查看大小、分区、文件系统类型: "df -hT"
  • 硬盘是否SCSI:/dev/sdX就是scsi的,hdX就是普通的。
  • 硬盘是否SSD : "cat /sys/block/sda/queue/rotational", 0是SSD,1是传统硬盘

普通硬盘的写速度大概100M/s,RAID级别的查看不方便,SSD的速度也不定,所以用dd测一下最靠谱:

 

dd if=/dev/zero of=dd.file bs=8k count=128k conv=fdatasync
dd if=/dev/zero of=./dd.file bs=1G count=1 conv=fdatasync

上面命令测试了分别以每次8k和1g的大小,写入1g文件的速度。

  • if:输入文件名, /dev/zero 设备无穷尽地提供0
  • of:输出文件名
  • bs:块大小
  • count:次数
  • conv=fdatasync :实际写盘,而不是写入Page Cache

硬盘读速度的测试同理,不过要先清理缓存,否则直接从Page Cache读了。

 

sh -c "sync && echo 3 > /proc/sys/vm/drop_caches”
dd if=./dd.file of=/dev/null bs=8k

 

2.4 网卡

先用ifconfig看看有多少块网卡和bonding。bonding是个很棒的东西,可以把多块网卡绑起来,突破单块网卡的带宽限制。

然后检查每块网卡的速度,比如"ethtool eth0"。

再检查bonding,比如"cat /proc/net/bonding/bond0", 留意其Bonding Mode是负载均衡的,再留意其捆绑的网卡的速度。

最后检查测试客户机与服务机之间的带宽,先简单ping或traceroute 一下得到RTT时间,iperf之类的可稍后。

 多队列网卡能够把请求分散的多个CPU 内核从2.6.21开始支持,通过#lspci -vvv查看,MSI-X && Enable+ && TabSize > 1表示多队列网卡,原理:每个队列对应不同的中断,不同的中断对应不同的CPU

单队列网卡使用RPS软中断也可以做CPU负载均衡,处理硬中断的程序中,根据地址和端口计算hash,然后触发软中断

2.5 操作系统

Linux的内核版本,是否64位: "uname -a"
Redhat/CentOS版本 : "cat /etc/redhat-release"

 

3. 布置好你的机器状态采集工具

讲究点,要用来出报告的,用Zabbix之类。

实时观察的,我喜欢dstat,比vmstat,iostat, sar们都好用,起码对得够齐,单位能自动转换。不过dstat需要安装(yum install dstat,如果装不上,就要将就着用vmstat,sar了)

  • dstat:默认,已有足够信息
  • dstat -am:再多一个memory信息
  • dstat -amN bond0,lo: 如果有bonding,dstat会把bond0和eth0 算双份,还有lo的也算到总量里,所以还是用-N指定网卡好。

要看IO细节,还是要用"iostat -dxm 5"

  • -d 不看cpu信息
  • -x 看细节
  • -m 以m为单位,而不以block原始size
  • 5 5秒的间隔

 

4. JMeter的调优顶一半的事

JMeter的版本越新越好。

 

4.1 JMeter的JVM参数

它默认连个垃圾收集算法都没有配,对延时要求高的,必须配上CMS或G1,内存也整大点降低GC的频率。其他的,给Server配的啥参数,给JMeter也来上一份,最好把-XX:+AggressiveOpts也加上。


5 JVM参数控制

5.1 java -server -Xmx1024m -Xms1024m -XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal -version 查看详细值

    参考:http://calvin1978.blogcn.com/articles/jvmoption-2.html

5.2 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly

-XX:SurvivorRatio 新生代中每个存活区的大小,默认为8,即1/10的新生代 1/(SurvivorRatio+2),有人喜欢设小点省点给新生代,但要避免太小使得存活区放不下临时对象而要晋升到老生代,还是从GC Log里看实际情况了。

-Xss 在堆之外,线程占用栈内存,默认每条线程为1M(以前是256K)。除了方法调用出参入参的栈,逃逸分析后也会把只在该线程里可见的对象直接分配在线程栈里,而不是公共的Heap里,也就减少了新生代的GC频率。有人喜欢设小点节约内存开更多线程,但反正内存够也就不必要设小,有人喜欢再设大点。

-XX:MaxDirectMemorySize,堆外内存/直接内存的大小,默认为Heap区总内存减去一个Survivor区的大小


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值