「java压测」java压测请求线程数

博主:adminadmin 2023-01-25 22:24:11 267

今天给各位分享java压测的知识,其中也会对java压测请求线程数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

华为三面:如何做JVM运行状态评估及优化?

估算系统QPS,每个请求会创建多少对象,占多少内存,机器配置选型,年轻代应该给多少内存,YGC触发频率,对象进入老年代的速率,老年代应该给多少内存,Full GC触发的频率。这些都是根据代码可大概合理预估的。

预估完成后,就能采用优化思路,先给自己的系统设置一些初始JVM参数。如堆内存大小,年轻代大小,Eden和Survivor的比例,老年代的大小,大对象的阈值,大龄对象进入老年代的阈值等。

优化思路很简单,尽量让:

每次 YGC 后的存活对象 Survivor区/2

保证都留存在年轻代里。尽量不让对象进入老年代,以减少Full GC频率,避免频繁Full GC影响JVM性能。

一个新系统开发完后,会经过本地的单元测试,到系统集成测试,再到测试环境的功能测试,预发布环境的压力测试,要保证系统的功能全部正常。在一定压力下性能、稳定性和并发能力都正常,最后才会部署到生产环境运行。

关键环节就是预发布环境的压力测试,会使用一些压力测试工具模拟比如1000个用户同时访问系统,造成每秒500个请求的压力,然后看系统能否支撑住每秒500请求的压力。同时看系统各个接口的响应延时是否在比如200ms内或在数据库中模拟出来百万级单表数据,然后看系统是否还能稳定运行。

具体如何进行系统压测,不是我们这里要讲述的内容,大家自行百度一下“Java压力测试”,就会看到很多开源的工具,可以轻松模拟出N个用户同时访问你系统的场景,还能给你一份压力测试报告,告诉你系统可以支撑每秒多少请求,包括系统接口的响应延时。通常压测工具会对系统发起持续不断的请求,持续很长时间,比如几个小时,甚至几天时间。

所以此时完全就可以在这个环节,对测试机器运行系统,采用jstat分析模拟真实环境的压力下,JVM运行状态。

然后根据压测环境JVM运行状况,如发现对象过快进入老年代,就需要采用之前介绍的优化思路,合理调整新生代、老年代、Eden、Survivor各个区域的内存大小,保证对象尽量留在年轻代,不要过快进入老年代。

当对压测环境下的系统优化好JVM参数之后,观察Young GC和Full GC频率都很低,此时就可部署上线。

每天高峰、低峰期用jstat、jmap、jhat等工具观察线上系统的JVM运行是否正常,有无频繁Full GC的问题。有就优化,没有就平时每天都定时或每周都看看。

如Zabbix、OpenFalcon、Ganglia,然后你部署的系统都可以把JVM统计项发送到这些监控系统里去。

此时你就可以在这些监控系统可视化的界面里,看到你需要的所有指标,包括你的各个内存区域的对象占用变化曲线,直接可以看到Eden区的对象增速,还会告诉你Young GC发生的频率以及耗时,包括老年代的对象增速以及Full GC的频率和耗时。

而且这些工具还允许你设置监控。即指定一个监控规则,比如线上系统的JVM,如果10分钟之内发生5 次以上Full GC,就需要发送报警给你。比如发送到你的邮箱、短信。

其实把这些命令行用好了,基本线上系统的JVM监控和优化都能搞定了。

线上运行系统,要不然用命令行工具手动监控,发现问题就优化,要不然就是依托公司监控系统,可视化查看日常系统的运行状态。

JAVA如何编写服务器压力测试软件

选我吧。。绝对短小精悍!

思路:

压力测试原理有两种,一种是连接测试,一种是负载测试

1,连接测试,就是多线程,不停的请求直到服务器死机或达到预期效果即可!

2,负载测试,就是一个线程的多步操作,每个线程占用服务器cpu 内存是否符合节能高效的标准,如果不是,那就优化吧

所有测试以额定用户(最大用户)为基础

JAVA如何写一个纯并发的压力测试

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Semaphore;

public class ConcurrentTest {

private static int thread_num = 200;

private static int client_num = 460;

private static Map keywordMap = new HashMap();

static {

try {

InputStreamReader isr = new InputStreamReader(new FileInputStream(

new File("clicks.txt")), "GBK");

BufferedReader buffer = new BufferedReader(isr);

String line = "";

while ((line = buffer.readLine()) != null) {

keywordMap.put(line.substring(0, line.lastIndexOf(":")), "");

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

int size = keywordMap.size();

// TODO Auto-generated method stub

ExecutorService exec = Executors.newCachedThreadPool();

// 50个线程可以同时访问

final Semaphore semp = new Semaphore(thread_num);

// 模拟2000个客户端访问

for (int index = 0; index  client_num; index++) {

final int NO = index;

Runnable run = new Runnable() {

public void run() {

try {

// 获取许可

semp.acquire();

System.out.println("Thread:" + NO);

String host = "?";

String para = "method=getQueryResultpageNum=1pageSize=5"

+ "queryKeyWord="

+ getRandomSearchKey(NO)

+ "questionID=-1questionIdPath=-1searchType=1"

+ "proLine=proSeries=proType=" + NO;

System.out.println(host + para);

URL url = new URL(host);// 此处填写供测试的url

HttpURLConnection connection = (HttpURLConnection) url

.openConnection();

// connection.setRequestMethod("POST");

// connection.setRequestProperty("Proxy-Connection",

// "Keep-Alive");

connection.setDoOutput(true);

connection.setDoInput(true);

PrintWriter out = new PrintWriter(connection

.getOutputStream());

out.print(para);

out.flush();

out.close();

BufferedReader in = new BufferedReader(

new InputStreamReader(connection

.getInputStream()));

String line = "";

String result = "";

while ((line = in.readLine()) != null) {

result += line;

}

// System.out.println(result);

// Thread.sleep((long) (Math.random()) * 1000);

// 释放

System.out.println("第:" + NO + " 个");

semp.release();

} catch (Exception e) {

e.printStackTrace();

}

}

};

exec.execute(run);

}

// 退出线程池

exec.shutdown();

}

private static String getRandomSearchKey(final int no) {

String ret = "";

int size = keywordMap.size();

// int wanna = (int) (Math.random()) * (size - 1);

ret = (keywordMap.entrySet().toArray())[no].toString();

ret = ret.substring(0, ret.lastIndexOf("="));

System.out.println("\t" + ret);

return ret;

}

}

java切面压测数据怎么用excel进行多维度分析

EXCEL提供了很多的数据分析函数在函数中可以看到全部的内容根据需要,对数据规整后,按你的需求使用函数以得要你想要的结果

JAVA JDBC连接Oracle数据库 进行压力测试

你好,你的UserDao第46行已经报空指针了,还有Connection reset是估计你的连接池资源不够达到上限了!

Java Web应用如何压力测试?工具有哪些?具体怎么做?

经典的自然是loadrunner,可以进行并发压力测试,很实用,可以模拟多IP,多用户同时运行,可以设置运行间隔,可以参考下相关的文档,建议去csdn上下一个相关的教程

关于java压测和java压测请求线程数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。