java性能测试代码 java性能排查

JAVA 里的 《伪码 , 测试码,真实码》是什么意思?伪码又称伪代码(pseudocode) , 又称为虚拟代码 , 是高层次描述算法的一种方法 。它不是一种现实存在的编程语言java性能测试代码;它可能综合使用多种编程语言中语法、保留字,甚至会用到自然语言 。
它以编程语言的书写形式指明算法的职能 。相比于程序语言,它更类似自然语言 。java性能测试代码我们可以将整个算法运行过程的结构用接近自然语言的形式(这里,java性能测试代码你可以使用任何一种你熟悉的文字 , 中文 , 英文 等等,关键是你把你程序的意思表达出来)描述出来. 使用伪代码, 可以帮助java性能测试代码我们更好的表述算法, 不用拘泥于具体的实现.
人们在用不同的编程语言实现同一个算法时意识到,他们的实现(注意:这里是实现,不是功能)很不同 。尤其是对于那些熟练于不同编程语言的程序员要理解一个(用其他编程语言编写的程序的)功能时可能很难,因为程序语言的形式限制了程序员对程序关键部分的理解 。这样伪代码就应运而生了 。
当考虑算法功能(而不是其语言实现)时,伪代码常常得到应用 。计算机科学在教学中通常使用虚拟码 , 以使得所有的程序员都能理解 。
2.测试码 用来测试,看系统是否可以持续不间断的稳定运行的代码
3.真实码 就是我们开发项目的真实代码!
北大青鸟java培训:Java初期学者程序性能容易的问题测试?1、介绍在开发中java性能测试代码,性能测试是设计初期容易忽略的问题java性能测试代码 , 开发人员会为java性能测试代码了解决一个问题而“不择手段”,所参与的项目中也遇到了类似问题,字符串拼接、大量的调用和数据库访问等等都对系统的性能产生了影响 , 可是大家不会关心这些问题,“CPU速度在变快”,“内存在变大”,并且,“好像也没有那么慢吧” 。
有很多商业的性能测试软件可供使用,如Jprofiler、JProbeProfiler等,但在开发当中显得有些遥远而又昂贵 。
2、目标本文将讲述如何利用语言本身提供的方法在开发中进行性能测试 , 找到系统瓶颈,进而改进设计;并且在尽量不修改测试对象的情况下进行测试 。
3、预备知识面向对象编程通过抽象继承采用模块化的来求解问题域,但是模块化不能很好的解决所有问题 。
有时,这些问题可能在多个模块中都出现 , 像日志功能,为了记录每个方法进入和离开时的信息,你不得不在每个方法里添加log("insomemethod")等信息 。
如何解决这类问题呢?将这些解决问题的功能点散落在多个模块中会使冗余增大,并且当很多个功能点出现在一个模块中时,代码变的很难维护 。
因此,AOP(AspectOrientedProgramming)应运而生 。
如果说OO(AobjectOrientedProgramming)关注的是一个类的垂直结构,那么AOP是从水平角度来看待问题 。
动态代理类可以在运行时实现若干接口,每一个动态代理类都有一个Invocationhandler对象与之对应,这个对象实现了InvocationHandler接口,通过动态代理的接口对动态代理对象的方法调用会转而调用Invocationhandler对象的invoke方法,通过动态代理实例、方法对象和参数对象可以执行调用并返回结果 。
说到AOP,大家首先会想到的是日志记录、权限和事务,是的,AOP是解决这些问题的好办法 。
性能测试主要包括以下几个方面:计算性能:可能是人们首先关心的,北大青鸟认为简单的说就是执行一段代码所用的时间内存消耗:程序运行所占用的内存大小启动时间:从你启动程序到程序正常运行的时间可伸缩性(scalability)用户察觉性能(perceivedperformance):不是程序实际运行有多快,而是用户感觉程序运行有多快.
java各接口性能如何测试Java编程下用JMeter Java Sampler进行多接口性能测试java性能测试代码,使用方法如下java性能测试代码:
/**
*JMeter Java Sampler介绍
*setupTest做些初始化java性能测试代码的工作java性能测试代码,每个线程只执行一次
*teardownTest做些清理工作,每个线程只执行一次
*runTest具体的测试执行工作,每个并发每次循环都将执行一次
**/
//继承AbstractJavaSamplerClient
public class hessianTest extends AbstractJavaSamplerClient{
//hessian调用地址
private static String url = "";
MyService collect = null;
HessianProxyFactory factory = new HessianProxyFactory();
public int id;
@Override
public void setupTest(JavaSamplerContext arg0) {
//获取jmeter传入参数
id=arg0.getIntParameter("id");
try {
collect = (MyService) factory.create(
MyService.class, url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
SampleResult sp = new SampleResult();
sp.sampleStart();
User rt = null;
try {
rt = collect.getUser(id);
} catch (Exception e) {
sp.sampleEnd();
sp.setSuccessful(false);
return sp;
}
sp.sampleEnd();
if(rt.getId()==id)
sp.setSuccessful(true);
else
sp.setSuccessful(false);
return sp;
}
@Override
public void teardownTest(JavaSamplerContext context) {
super.teardownTest(context);
}
}
java里测试添加的命令语句是什么ava性能调试命令
java性能调试命令_性能测试--十个命令迅速发现性能问题
投机启示录
原创
关注
0点赞·85人阅读
十个命令迅速发现性能问题
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
1. uptime
$ uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
这是一种用来快速查看系统平均负载的方法,它表明了系统中有多少要运行的任务(进程) 。在 Linux 系统中,这些数字包含了需要在 CPU 中运行的进程以及正在等待 I/O(通常是磁盘 I/O)的进程 。它仅仅是对系统负载的一个粗略展示,稍微看下即可 。你还需要其他工具来进一步了解具体情况 。
这三个数字展示的是一分钟、五分钟和十五分钟内系统的负载总量平均值按照指数比例压缩得到的结果 。从中我们可以看到系统的负载是如何随时间变化的 。比方你在检查一个问题,然后看到 1 分钟对应的值远小于 15 分钟的值,那么可能说明这个问题已经过去了,你没能及时观察到 。
在上面这个例子中 , 系统负载在随着时间增加,因为最近一分钟的负载值超过了 30,而 15 分钟的平均负载则只有 19 。这样显著的差距包含了很多含义,比方 CPU 负载 。若要进一步确认的话,则要运行 vmstat 或 mpstat 命令 。
2. dmesg | tail
$ dmesg | tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.
这条命令显式了最近的 10 条系统消息 , 如果它们存在的话 。查找能够导致性能问题的错误 。上面的例子包含了 oom-killer , 以及 TCP 丢弃一个请求 。
千万不要错过这一步!dmesg 命令永远值得一试
3. vmstat 1
$ vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
vmstat(8) 是虚拟内存统计的简称,其是一个常用工具(几十年前为了 BSD 所创建) 。其在每行打印一条关键的服务器的统计摘要 。
vmstat 命令指定一个参数 1 运行 , 来打印每一秒的统计摘要 。(这个版本的 vmstat)输出的第一行的那些列 , 显式的是开机以来的平均值,而不是前一秒的值 。现在,我们跳过第一行 , 除非你想要了解并记住每一列 。
检查这些列:
r:CPU 中正在运行和等待运行的进程的数量 。其提供了一个比平均负载更好的信号来确定 CPU 是否饱和,因为其不包含 I/O 。解释:“r”的值大于了 CPU 的数量就表示已经饱和了 。
free:以 kb 为单位显式的空闲内存 。如果数字位数很多,说明你有足够的空闲内存 。“free -m” 命令,是下面的第七个命令 , 其可以更好的说明空闲内存的状态 。
si, so:Swap-ins 和 swap-outs 。如果它们不是零 , 则代表你的内存不足了 。
us, sy, id, wa, st:这些都是平均了所有 CPU 的 CPU 分解时间 。它们分别是用户时间(user)、系统时间(内核)(system)、空闲(idle)、等待 I/O(wait)、以及占用时间(stolen)(被其他访客,或使用 Xen,访客自己独立的驱动域) 。
CPU 分解时间将会通过用户时间加系统时间确认 CPU 是否为忙碌状态 。等待 I/O 的时间一直不变则表明了一个磁盘瓶颈;这就是 CPU 的闲置 , 因为任务都阻塞在等待挂起磁盘 I/O 上了 。你可以把等待 I/O 当成是 CPU 闲置的另一种形式 , 其给出了为什么 CPU 闲置的一个线索 。
对于 I/O 处理来说,系统时间是很重要的 。一个高于 20% 的平均系统时间,可以值得进一步的探讨:也许内核在处理 I/O 时效率太低了 。
在上面的例子中,CPU 时间几乎完全花在了用户级,表明应用程序占用了太多 CPU 时间 。而 CPU 的平均使用率也在 90% 以上 。这不一定是一个问题;检查一下“r”列中的饱和度 。
4. mpstat -P ALL 1
$ mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU \usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
[...]
这个命令打印每个 CPU 的 CPU 分解时间,其可用于对一个不均衡的使用情况进行检查 。一个单独 CPU 很忙碌则代表了正在运行一个单线程的应用程序 。
5. pidstat 1
$ pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID \usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
07:41:03 PM UID PID \usr %system %guest %CPU CPU Command
07:41:04 PM 0 4214 6.00 2.00 0.00 8.00 15 mesos-slave
07:41:04 PM 0 6521 1590.00 1.00 0.00 1591.00 27 java
07:41:04 PM 0 6564 1573.00 10.00 0.00 1583.00 28 java
07:41:04 PM 108 6718 1.00 0.00 0.00 1.00 0 snmp-pass
07:41:04 PM 60004 60154 1.00 4.00 0.00 5.00 9 pidstat
pidstat 命令有点像 top 命令对每个进程的统计摘要 , 但循环打印一个滚动的统计摘要来代替 top 的刷屏 。其可用于实时查看 , 同时也可将你所看到的东西(复制粘贴)到你的调查记录中 。
上面的例子表明两个 Java 进程正在消耗 CPU 。%CPU 这列是所有 CPU 合计的;1591% 表示这个 Java 进程消耗了将近 16 个 CPU 。
6. iostat -xz 1
$ iostat -xz 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
avg-cpu: \user %nice %system %iowait %steal %idle
73.96 0.00 3.73 0.03 0.06 22.21
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm \util
xvda 0.00 0.23 0.21 0.18 4.52 2.08 34.37 0.00 9.98 13.80 5.42 2.44 0.09
xvdb 0.01 0.00 1.02 8.94 127.97 598.53 145.79 0.00 0.43 1.78 0.28 0.25 0.25
xvdc 0.01 0.00 1.02 8.86 127.79 595.94 146.50 0.00 0.45 1.82 0.30 0.27 0.26
dm-0 0.00 0.00 0.69 2.32 10.47 31.69 28.01 0.01 3.23 0.71 3.98 0.13 0.04
dm-1 0.00 0.00 0.00 0.94 0.01 3.78 8.00 0.33 345.84 0.04 346.81 0.01 0.00
dm-2 0.00 0.00 0.09 0.07 1.35 0.36 22.50 0.00 2.55 0.23 5.62 1.78 0.03
[...]
这是用于查看块设备(磁盘)情况的一个很棒的工具,无论是对工作负载还是性能表现来说 。查看个列:
r/s, w/s, rkB/s, wkB/s:这些分别代表该设备每秒的读次数、写次数、读取 kb 数,和写入 kb 数 。这些用于描述工作负载 。性能问题可能仅仅是由于施加了过大的负载 。
await:以毫秒为单位的 I/O 平均消耗时间 。这是应用程序消耗的实际时间,因为它包括了排队时间和处理时间 。比预期更大的平均时间可能意味着设备的饱和,或设备出了问题 。
avgqu-sz:向设备发出的请求的平均数量 。值大于 1 说明已经饱和了(虽说设备可以并行处理请求,尤其是由多个磁盘组成的虚拟设备 。)
\util:设备利用率 。这个值是一个显示出该设备在工作时每秒处于忙碌状态的百分比 。若值大于 60%,通常表明性能不佳(可以从 await 中看出),虽然它取决于设备本身 。值接近 100% 通常意味着已饱和 。
如果该存储设备是一个面向很多后端磁盘的逻辑磁盘设备,则 100% 利用率可能只是意味着当前正在处理某些 I/O 占用,然而 , 后端磁盘可能远未饱和,并且可能能够处理更多的工作 。
请记住,磁盘 I/O 性能较差不一定是程序的问题 。许多技术通常是异步 I/O,使应用程序不会被阻塞并遭受延迟(例如,预读 , 以及写缓冲) 。
7. free -m
$ free -m
total used free shared buffers cached
Mem: 245998 24545 221453 83 59 541
-/buffers/cache: 23944 222053
Swap: 0 0 0
右边的两列显式:
buffers:用于块设备 I/O 的缓冲区缓存 。
cached:用于文件系统的页面缓存 。
我们只是想要检查这些不接近零的大小 , 其可能会导致更高磁盘 I/O(使用 iostat 确认) , 和更糟糕的性能 。上面的例子看起来还不错,每一列均有很多 M 个大小 。
比起第一行,-/buffers/cache 提供的内存使用量会更加准确些 。Linux 会把暂时用不上的内存用作缓存,一旦应用需要的时候就立刻重新分配给它 。所以部分被用作缓存的内存其实也算是空闲的内存 。为了解释这一点,甚至有人专门建了个网站: linuxatemyram 。
如果你在 Linux 上安装了 ZFS,这一点会变得更加困惑,因为 ZFS 它自己的文件系统缓存不算入free -m 。有时候发现系统已经没有多少空闲内存可用了,其实内存却都待在 ZFS 的缓存里 。
8. sar -n DEV 1
$ sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:16:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:50 AM eth0 19763.00 5101.00 21999.10 482.56 0.00 0.00 0.00 0.00
12:16:50 AM lo 20.00 20.00 3.25 3.25 0.00 0.00 0.00 0.00
12:16:50 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
这个工具可以被用来检查网络接口的吞吐量:rxkB/s 和 txkB/s,以及是否达到限额 。上面的例子中,eth0 接收的流量达到 22Mbytes/s,也即 176Mbits/sec(限额是 1Gbit/sec)
我们用的版本中还提供了 %ifutil 作为设备使用率(接收和发送的最大值)的指标 。我们也可以用 Brendan 的 nicstat 工具计量这个值 。一如 nicstat,sar 显示的这个值是很难精确取得的,在这个例子里面,它就没在正常的工作(0.00) 。
9. sar -n TCP,ETCP 1
$ sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
12:17:20 AM active/s passive/s iseg/s oseg/s
12:17:21 AM 1.00 0.00 8359.00 6039.00
12:17:20 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:21 AM 0.00 0.00 0.00 0.00 0.00
这是一些关键的 TCP 指标的汇总视图 。这些包括:
active/s:每秒本地发起 TCP 连接数(例如,通过 connect()) 。
passive/s:每秒远程发起的 TCP 连接数(例如,通过 accept()) 。
retrans/s:每秒重传 TCP 次数 。
active 和 passive 的连接数往往对于描述一个粗略衡量服务器负载是非常有用的:新接受的连接数(passive),下行连接数(active) 。可以理解为 active 连接是对外的,而 passive 连接是对内的 , 虽然严格来说并不完全正确(例如,一个 localhost 到 localhost 的连接) 。
重传是出现一个网络和服务器问题的一个征兆 。其可能是由于一个不可靠的网络(例如 , 公网)造成的,或许也有可能是由于服务器过载并丢包 。上面的例子显示了每秒只有一个新的 TCP 连接 。
10. top
$ top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241 total, 24921688 used, 22698073 free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIMECOMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched
top 命令包含了很多我们之前已经检查过的指标 。可以方便的执行它来查看相比于之前的命令输出的结果有很大不同,这表明负载是可变的 。
top 的一个缺点是 , 很难看到数据随时间变动的趋势 。vmstat 和 pidstat 提供的滚动输出会更清楚一些 。如果你不以足够快的速度暂停输出(Ctrl-S 暂停,Ctrl-Q 继续),一些间歇性问题的线索也可能由于被清屏而丢失 。
性能测试中如何使用java批量注册登录账户性能测试中示例代码使用java批量注册登录账户 。
性能测试过程中所需的测试数据,以登录为例,为了更真实的模 批量读取注册 。
Java登录注册功能实现代码解析,文中通示例代码,每个用户信息都是唯一的 , 所以可以借助Set的特性来操作用户信息的存放 。
【java性能测试代码 java性能排查】关于java性能测试代码和java性能排查的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读