我有一个Java后端服务,我需要测试它的性能。它没有暴露于网络,也可能永远都没有。我想知道如何在大量流量(每秒超过10万次调用)下测试此多线程服务(仅是带有公共方法的类)的性能。
最佳答案
如果您要说要由您的程序每秒创建100K +次调用,则可以使用ThreadExecutor创建要在您的调用中测试公共方法的最大线程数。
例如,以下代码使用1000个线程同时调用您的公共方法
ExecutorService executor = Executors.newFixedThreadPool(1000);
List<YourClass> callingList = new ArrayList<YourClass>();
for (int i = 0; i < 1000; i++) {
EntryPoint Impl = new EntryPoint (YourClass);
callingList.add(Impl);
}
private Class EntryPoint implements Callable<Object>{
private YourClass example;
EntryPoint (YourClass class) {
this.example = class;
}
public List onCall() throws InterruptedException {
example.yourPublicMethod();
如果要测量每个线程为每个方法花费的时间,请使用AspectJ作为拦截器。您可以在调用1000个线程的过程中将每个方法花费的时间记录在列表中。最后,您可以再次迭代列表以获取花费的时间每种方法都有。如果您要寻找工具,则可以使用VisualVM或Jconsole。您可以获取有关CPU使用率,内存使用率,线程状态,垃圾收集器,创建的对象数以及由对象占用的字节数以及装入的类数和存储空间的信息。还有很多 。