
在使用JMeter进行性能测试时,以下情况经常出现:
1测试过程中,指定运行的线程数、指定运行循环次数不断改变;
2访问的目标地址发生改变,端口发生改变,需要改写脚本。
在非GUI运行脚本模式下,我们可以通过动态修改内置属性的办法来避免修改脚本
JMeter测试计划在运行Sampler之前先加载配置文件(jmeterproperties,systemproperties等),读取属性,所以那么我们可以借助属性来实现。
修改这些配置文件,麻烦且不现实。JMeter提供了方法可以动态修改属性,在命令行使用 -J 来指定 JMeter Properties ,使用 __P() 函数来获取命令中指定的属性值。( jmeterbat -help | jmetersh -help 可以查看帮助)
如图,首先:在testjmx测试脚本中用 ${__P(threadCount,)} 来获取threadCount的值; ${__P(cycle,)} 来获取cycle的值,是参数名设置。
接下来就是在启动命令中传递这两个参数:
JMeter 命令行通过 -D 来指定System Properties,类似于Jdk中我们用-D来指定一些系统属性,比如开启JMX远程监控。
在JMeter脚本中我们用 __property() 函数来获取,比如 -Durl=127001
如图:首先在测试脚本中用 ${__property(url,,)} 来设置变量用以接收
接下来就是在启动命令中传递这两个这个值
同理要动态化端口,首先脚本中用 ${__property(port,,)} ,启动命令用 -Dport=8080 传递参数就可以了。
你是要用VS 调试代码么? 如果是的话,你可以在每个线程的执行函数中按F9设断点,程序运行到断点处是观察窗口上方 “Thread”文本框里面的内容,这里写的就是当前程序运行的线程的ID。
你如果不调试,直接运行的话,只能在每个线程中添加输出的语句,运行到哪了有个记录。。。
您好,线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程,使每一个核心能同时处理两线程任务。
就像一条马路,路没变宽,单变双车道了,可以同时过两辆车
处理多任务,或对多线程支持好得程序,比较有优势,但和真正的每核每线程比还是有很大差距,毕竟是虚拟出来的。
1Quartz中的触发器Trigger
Job 包含了要执行任务的逻辑,但是 Job 对何时该执行却一无所知。这个事情留给了 Trigger。Quartz Trigger 继承了抽象的 orgquartzTrigger 类。当前,Quartz 有三个可用的 Trigger:
Java代码
·orgquartzSimpleTrigger
·orgquartzCronTrigger
·orgquartzNthIncludeDayTrigger
2SimpleTrigger的介绍
正如其名所示,SimpleTrigger对于设置和使用是最为简单的一种 Quartz Trigger。它是为那种需要在特定的日期/时间启动,且以一个可能的间隔时间重复执行 n 次的 Job 所设计的。
我们前面已经在一个简单的Quartz的例子里使用过了SimpleTrigger,我们通过
Java代码
Trigger trigger = TriggerUtilsmakeSecondlyTrigger(10);
来获取到我们的Trigger,而得到的实际上就是SimpleTrigger类的一个实现;我们实际上
还可以对上面的代码进行小小的改造:
Java代码
Trigger trigger =
new SimpleTrigger("myTrigger",SchedulerDEFAULT_GROUP,
new Date(),null,SimpleTriggerREPEAT_INDEFINITELY,60000L);
对于Quartz而言,它还不能满足我们的触发情况,所以它仅仅是用于一些简单的触发情况;
3orgquartzCronTrigger
CronTrigger 允许设定非常复杂的触发时间表。然而有时也许不得不使用两个或多个 SimpleTrigger 来满足你的触发需求,这时候,你仅仅需要一个 CronTrigger 实例就够了。顾名思义,CronTrigger 是基于 Unix 类似于 cron 的表达式。例如,你也许有一个 Job,要它在星期一和星期五的上午 8:00-9:00 间每五分钟执行一次。假如你试图用 SimpleTrigger 来实现,你或许要为这个 Job 配置多个 Trigger。然而,你可以使用如下的表达式来产生一个遵照这个时间表触发的 Trigger;
比如:
Java代码
try {
CronTrigger cTrigger = new CronTrigger("myTrigger",
SchedulerDEFAULT_GROUP, "0 0/5 8
MON,FRI");
} catch (ParseException ex) {
exprintStackTrace();
}
因为 CronTrigger 内建的如此强的灵活性,也与生俱来可用于创建几乎无所限制的表达式,且因为支持unix的cron表达式,则做为企业应用,我们的 *** 作系统一般也都以unxi *** 作系统为主,所以掌握CronTrigger 的使用费用有必要,我们将在后面对CronTrigger 进行详细的介绍;
4orgquartzNthIncludedDayTrigger
orgquartzNthIncludedDayTrigger 是 Quartz 开发团队最新加入到框架中的一个 Trigger。它设计用于在每一间隔类型的第几天执行 Job。例如,你要在每个月的 15 号执行开票的 Job,用 NthIncludedDayTrigger就再合适不过了。Quartz的 Caldendar 也可与 Trigger 关联以此把周末与节假日考虑进来,并在必要时跳开这些日期。接下来的代码片断描绘了如何创建一个 NthIncludedDayTrigger
Java代码
NthIncludedDayTrigger trigger =
new NthIncludedDayTrigger("MyTrigger",SchedulerDEFAULT_GROUP);
triggersetN(15);
triggersetIntervalType(NthIncludedDayTriggerINTERVAL_TYPE_MONTHLY);
5Job与Trigger的关系
大家都知道,一个作业,比较重要的三个要素就是Schduler,jobDetail,Trigger;
而Trigger对于job而言就好比一个驱动器;没有触发器来定时驱动作业,作业就无法运行;
对于Job而言,一个job可以对应多个Trigger,但对于Trigger而言,一个Trigger只能对应一个job;所以一个 Trigger 只能被指派给一个 Job;
如果你已经持有这N线程的对象Thread[] threadList,你可以直接调用threadList[i]getState();
或者你创建它们的时候指定一个ThreadGroup,这样调用ThreadGroupactiveCount就可以知道还在运行的个数了
t当然就是maps中的key值啦
Map <Thread, StackTraceElement[] > maps = ThreadgetAllStackTraces();
ThreadMXBean threadMXBean = ManagementFactorygetThreadMXBean();
for(MapEntry<Thread, StackTraceElement[]> entry : mapsentrySet()) {
Thread t = entrygetKey();
ThreadInfo info = threadMXBeangetThreadInfo(tgetId());
}
在这里,先回顾一下OpenMP的parallel并行区域线程数量的确定,对于一个并行区域,有一个team的线程去执行,那么该分配多少个线程去执行呢?
OpenMP的遇到parallel指令后创建的线程team的数量由如下过程决定:
1 if子句的结果
2 num_threads的设置
3 omp_set_num_threads()库函数的设置
4 OMP_NUM_THREADS环境变量的设置
5 编译器默认实现(一般而言,默认实现的是总线程数等于处理器的核心数)
(查看更多信息)
2、3、4优先级依次降低的,也就是前面的设置可以覆盖后面的设置,当然也是相对而言,num_threads子句只会影响当前的并行区域,而omp_set_num_threads对OMP_NUM_THREADS环境变量的覆盖是在整个程序运行期间全局的。
(2)几个容易混淆的OpenMP函数
1 omp_get_thread_num
获取线程的num,即ID。这里的ID是OpenMP的team内的ID,在OpenMP中,一个team内的线程的ID是俺顺序排列的,0、1、2
说明:此函数在并行区域外或者并行区域内都可以调用。在并行区域外,获取的是master线程的ID,即为0。在并行区域内,每次执行到此函数,获取的是当前执行线程的ID。
线程入口地址,参加文章
>
以上就是关于Jmeter命令行控制线程数全部的内容,包括:Jmeter命令行控制线程数、我用C#写的程序,用到好几个线程 ,现在我想查看程序正在执行的线程有哪些,怎么查看求大侠!、什么是运行线程个数请说通俗一点儿!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)