Jvisualvm 对 暴力破解 进行性能优化



【导读】使用Jvisualvm 对暴力破解视频 进行性能优化,通过监视、线程、抽样器功能对Crack程序的运行状态、内存状态进行有效监控分析;
2014-06-09_000549
    最近开发一套暴力破解程序,放在服务器上跑,发现过一两天就会报堆内存溢出: java.lang.OutOfMemoryError: Java heap space;现在针对这个问题使用Jvisualvm 进行分析;下图是破解程序结构图:
2014-06-16_075711

本文章从以下两方面进行描述:

  • Jvisualvm 运行时间 分析
  • Jvisualvm 运行内存 分析

Jvisualvm 运行时间 分析

设置一:任务 task:100,休眠 time: 3 S; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void crack() {
         double loop = Math.pow(params.length, bit);
         List paramList = new ArrayList();
         paramList.add(0);
         for (int i = 0; i < loop; i++) {
            if (i!=0&&i%100==0){
                 try {
                     System.out.println( "**************" +concat(paramList));
                     Thread.sleep(3000);
                 } catch (InterruptedException ex){
                     ex.printStackTrace();
                 }
             }
             detect(i, paramList);
             if (request(paramList)) {
                 break ;
             }
         }
     }

线程监控:2014-06-16_094757  破解花时间:   trash count-pwd: 10-000 | spend time:134235   设置二:任务 task:50,休眠 time: 3 S; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void crack() {
         double loop = Math.pow(params.length, bit);
         List paramList = new ArrayList();
         paramList.add(0);
         for (int i = 0; i < loop; i++) {
            if (i!=0&&i%50==0){
                 try {
                     System.out.println( "**************" +concat(paramList));
                     Thread.sleep(3000);
                 } catch (InterruptedException ex){
                     ex.printStackTrace();
                 }
             }
             detect(i, paramList);
             if (request(paramList)) {
                 break ;
             }
         }
     }

线程监控:2014-06-16_081145破解花时间: trash count-pwd: 10-000 | spend time:244678   由以上测试分析:task=100 时,线程pool-1-thread 不中断执行,而task=50时,线程都出现等待状态,所以 最适合任务数task count 在:50-100之间;下面在此基础上对内存进一步分析;

Jvisualvm 运行内存 分析

设置三:任务 task:80,休眠 time: 3 S; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void crack() {
         double loop = Math.pow(params.length, bit);
         List paramList = new ArrayList();
         paramList.add(0);
         for (int i = 0; i < loop; i++) {
            if (i!=0&&i%80==0){
                 try {
                     System.out.println( "**************" +concat(paramList));
                     Thread.sleep(3000);
                 } catch (InterruptedException ex){
                     ex.printStackTrace();
                 }
             }
             detect(i, paramList);
             if (request(paramList)) {
                 break ;
             }
         }
     }

线程监控:2014-06-16_081700抽样器监控:2014-06-16_081735破解花时间: trash count-pwd: 10-000 | spend time:137321   设置四:任务 task:90,休眠 time: 3 S; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void crack() {
         double loop = Math.pow(params.length, bit);
         List paramList = new ArrayList();
         paramList.add(0);
         for (int i = 0; i < loop; i++) {
            if (i!=0&&i%90==0){
                 try {
                     System.out.println( "**************" +concat(paramList));
                     Thread.sleep(3000);
                 } catch (InterruptedException ex){
                     ex.printStackTrace();
                 }
             }
             detect(i, paramList);
             if (request(paramList)) {
                 break ;
             }
         }
     }

线程监控:2014-06-16_094757抽样器监控:2014-06-16_101058破解时间: trash count-pwd: 10-000 | spend time:129327

    通过以上四次不同测试,用Jvisualvm 线程模块与抽样器模块监控 得出:最后一次测试,任务 task:90,时间 time:3S ,花费时间:约129S,是性能最优的;
    通过最后两次抽样器监控发现,task=90,time=3S时,Crack$Task实例数为 649,并且持续上升,进过一段时间,由于任务生产速度大于任务消费速度:V1>V2,慢慢会导致内存占用过度,发生内存溢出!这也是程序放在服务器上运行几天突然:java.lang.OutOfMemoryError: Java heap space 原因;
    所以一定要限制任务生产速度小于等于任务消费速度V1<=V2,因此第三次测试:task: 80,time: 3S 是可行方案;
【导读】使用Jvisualvm 对暴力破解视频 进行性能优化,通过监视、线程、抽样器功能对Crack程序的运行状态、内存状态进行有效监控分析;
2014-06-09_000549
    最近开发一套暴力破解程序,放在服务器上跑,发现过一两天就会报堆内存溢出: java.lang.OutOfMemoryError: Java heap space;现在针对这个问题使用Jvisualvm 进行分析;下图是破解程序结构图:
2014-06-16_075711

本文章从以下两方面进行描述:

  • Jvisualvm 运行时间 分析
  • Jvisualvm 运行内存 分析

Jvisualvm 运行时间 分析

设置一:任务 task:100,休眠 time: 3 S; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void crack() {
         double loop = Math.pow(params.length, bit);
         List paramList = new ArrayList();
         paramList.add(0);
         for (int i = 0; i < loop; i++) {
            if (i!=0&&i%100==0){
                 try {
                     System.out.println( "**************" +concat(paramList));
                     Thread.sleep(3000);
                 } catch (InterruptedException ex){
                     ex.printStackTrace();
                 }
             }
             detect(i, paramList);
             if (request(paramList)) {
                 break ;
             }
         }
     }

线程监控:2014-06-16_094757  破解花时间:   trash count-pwd: 10-000 | spend time:134235   设置二:任务 task:50,休眠 time: 3 S; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void crack() {
         double loop = Math.pow(params.length, bit);
         List paramList = new ArrayList();
         paramList.add(0);
         for (int i = 0; i < loop; i++) {
            if (i!=0&&i%50==0){
                 try {
                     System.out.println( "**************" +concat(paramList));
                     Thread.sleep(3000);
                 } catch (InterruptedException ex){
                     ex.printStackTrace();
                 }
             }
             detect(i, paramList);
             if (request(paramList)) {
                 break ;
             }
         }
     }

线程监控:2014-06-16_081145破解花时间: trash count-pwd: 10-000 | spend time:244678   由以上测试分析:task=100 时,线程pool-1-thread 不中断执行,而task=50时,线程都出现等待状态,所以 最适合任务数task count 在:50-100之间;下面在此基础上对内存进一步分析;

Jvisualvm 运行内存 分析

设置三:任务 task:80,休眠 time: 3 S; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void crack() {
         double loop = Math.pow(params.length, bit);
         List paramList = new ArrayList();
         paramList.add(0);
         for (int i = 0; i < loop; i++) {
            if (i!=0&&i%80==0){
                 try {
                     System.out.println( "**************" +concat(paramList));
                     Thread.sleep(3000);
                 } catch (InterruptedException ex){
                     ex.printStackTrace();
                 }
             }
             detect(i, paramList);
             if (request(paramList)) {
                 break ;
             }
         }
     }

线程监控:2014-06-16_081700抽样器监控:2014-06-16_081735破解花时间: trash count-pwd: 10-000 | spend time:137321   设置四:任务 task:90,休眠 time: 3 S; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void crack() {
         double loop = Math.pow(params.length, bit);
         List paramList = new ArrayList();
         paramList.add(0);
         for (int i = 0; i < loop; i++) {
            if (i!=0&&i%90==0){
                 try {
                     System.out.println( "**************" +concat(paramList));
                     Thread.sleep(3000);
                 } catch (InterruptedException ex){
                     ex.printStackTrace();
                 }
             }
             detect(i, paramList);
             if (request(paramList)) {
                 break ;
             }
         }
     }

线程监控:2014-06-16_094757抽样器监控:2014-06-16_101058破解时间: trash count-pwd: 10-000 | spend time:129327

    通过以上四次不同测试,用Jvisualvm 线程模块与抽样器模块监控 得出:最后一次测试,任务 task:90,时间 time:3S ,花费时间:约129S,是性能最优的;
    通过最后两次抽样器监控发现,task=90,time=3S时,Crack$Task实例数为 649,并且持续上升,进过一段时间,由于任务生产速度大于任务消费速度:V1>V2,慢慢会导致内存占用过度,发生内存溢出!这也是程序放在服务器上运行几天突然:java.lang.OutOfMemoryError: Java heap space 原因;
    所以一定要限制任务生产速度小于等于任务消费速度V1<=V2,因此第三次测试:task: 80,time: 3S 是可行方案;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值