2023性能测试工作积累

一  理论

1、
性能调优思路:性能瓶颈点分析、关键参数调整、sql调优。调优过程中,通过系统资源、吞吐量、负载等因素来辅助分析。

性能调优流程:
确定调优范围:服务器CPU、内存、IO、网络是否已被充分利用,是否存在瓶颈点。
系统调优:目的是充分利用服务器资源,避免资源冲突,提升吞吐量。调优效果:硬件<系统配置<数据库表结构
SQL调优:通过analyze语句生成表统计信息;通过explain分析执行计划;优化sql写法;

2、was性能调优

3、并不是cpu满才是瓶颈,到40、50就会有少量cpu队列等待。如果增加机器,cpu会下降,tps会提升,说明单台机器的连接数是潜在的瓶颈。

 

 

二  数据库

1、Oracle Database 12c DBA官方手册(第8版)-Bob Bryla-微信读书 (qq.com)
2、mysql
  2.1 造数时,innodb_flush_log_at_trx_commit = 1 造数时改为0,造完改为1,这个在配置文件mysql配置文件里,改为0表示每秒写入一次log,而不是每次事务提交就写入。这样可以加速造数的速度。

  2.2 正常写for循环一条条insert,速度是3小时1000万,insert select limit 10000 ,速度是1小时3000万

  2.3 mysql数据库给日期变量p_create_time加d天
     DATE_ADD(p_create_time,INTERVAL d day);

  2.4 mysql对比两个数据库的索引,用临时表当媒介,注意临时表只存在于当前会话,会话一关,临时表就没了
    create temporary table test_tmp as select index_name,table_name from information_schema.STATISTICS;
    然后通过子查询,看哪些索引是在a库里有,b库里没有的
    select * from a where (table_name,index_name) not in (select table_name,index_name from b)

3、oracle

  3.1 oracle数据库给日期变量

declare
    p_create_time DATE;
    p_create_time2 VARCHAR2(20);
begin
    p_create_time:=to_date('2018-01-01','YYYY-MM-DD');
    for i in 1 .. 100 loop
        p_create_time2:=to_char(p_create_time,'YYYY-MM-DD');
        if mod(i,20) = 0 then
            p_create_time := p_create_time + 1;
        end if;
    end loop;
end;            

oracle把test表的aa字段,修改为从10000开始,每10笔加1
update test set aa = trunc(10000+(rownum-1)/10,0) 如果不加trunc,会得到一个有很多小数位的浮点数,会超出字段长度限制

  3.2 Oracle查看一张表的执行计划,发现有索引还触发了全表扫描,原因如下:
    如果优化器确定查询需要表中的大部分块,即使索引是可用的,它仍将使用全表扫描。全表扫描会使用更大的I/O调用。较少的大型IO调用比许多较小的调用更划算。

三  linux

1、Linux 三剑客实例详解「grep、sed 、awk」 - 知乎 (zhihu.com)

2、从今天被修改的日志文件中,找某个关键字 find /tmp/log -mtime 0 | xargs grep -10 '关键字'

3、在linux服务器上远程传输文件
  scp xx.log root@192.168.1.2:/root 

  使用scp命令,把当前机器上的xx.log文件传输到192.168.1.2服务器上root用户的/root目录下

4、看cpu

  sar -u 1 5
  vmstat 1 -w r是等待cpu的进程,b是等待io的进程

5、看网络
  ip a 看有哪些网卡
  ethtool eth0(网卡名) 里面的speed就是带宽上限
  sar -n DEV 1 10 看各个网卡的实时带宽,1秒输出一次,共10次
  iftop -i eth0(网卡名) -P 看哪个端口在用网络
  iotop -p $PID -d 1

6、看磁盘
  iostat -x -k %util 一秒钟之内,有多少时间用于io,如果100,说明太多io
  iostat -x 1 10 w_wait一般不超过2毫秒,磁盘使用率小于60%
  iotop -oP 看哪个进程使用io高 或pidstat -d 1
  pidstat -p $PID -d 1 用启动这个进程的用户启动pidstat,若用其他用户是没有查看权限的,只能看到显示-1

  

  看磁盘读写速度
  dd bs=1k count=1000k if=/dev/zero of=~/test_default.txt conv=fsync
  写速度 time dd if=/dev/zero of=/tmp/test bs=8k count=10000 conv=fsync    // 测完以后记得删文件
  读速度 time dd if=/tmp/test of=/dev/null bs=8k

7、看内存
  free -g -g是单位,默认是字节
  top执行shift+m看线程对内存的占用

8、设置crontab定时
  suse linux重启crontab的命令是: /sbin/service cron restart
  使用crontab一般是用root用户,有些用户没有使用crontab的权限
  cron -l 看目前的定时
  cron -e 修改目前的定时

  设置每10秒运行一次:
    * * * * * sleep 10; /tmp/xx.sh
    * * * * * sleep 20; /tmp/xx.sh
  

  设置每分钟运行一次
    */1 * * * * /tmp/xx.sh

 

9、火焰图

  看当前一段时间内,某个进程占用cpu的线程函数及其调用栈,最下面是栈底

  cd /tmp/async-profiler-2.9-linux-x64
  sh profiler.sh -d 120 -f profiler.html 12345 120是截取当前120秒时间内,12345是分析的进程号

10、arthas 看jvm 以及函数调用链耗时
  cd /tmp/arthas-packaging-3.5.2-bin
  sh as.sh 进程号
  dashboard 就能看实时jvm了
  

  看函数调用链耗时,得知道入口函数类名、方法名
  sh as.sh 进程号之后
  trace com.test.testClass testFunc '#cost > 500' -n 200 追踪testClass类testFunc函数里,耗时大于500毫秒的函数,并列出前200个
  然后找到耗时比较长的,再用trace命令看他里面又调用了什么

四  性能分析工具

1、IBM官方的jvm分析工具,分析是否有内存泄漏风险,和占用jvm过多的对象及其所在类或函数,比visualVM更直观,能定位某个基本类型是哪个类,visualVM只知道基本类型占内存多,但不知道这些基本类型是哪个类的。
工具名:
  IBM HeapAnalyzer
  IBM Thread and Monitor Dump Analyzer for Java
启动工具命令:
  java -Xmx6g -jar jca464.jar 6g是自己指定的启动这个工具的jvm大小,如果dump文件5个g,jvm分析工具必须大于5g,它才能打开dump文件
  java -Xmx6g -jar ha457.jar

 五  压测工具

  1、loadrunner测试socket接口

 

 
posted @ 2024-03-17 13:54  zhaot1993  阅读(11)  评论(0编辑  收藏  举报