jmeter报错java.lang.NoClassDefFoundError: Could not initialize class io.grpc.netty.NettyChannelBuilder

背景:使用jmeter远程负载机压测rocksdb(研发在rocksdb上封了一层服务,压测的是服务接口)时,jmeter后台报以下错误:

2021-12-09 18:02:06,970 ERROR o.a.j.JMeter: Uncaught exception in thread Thread[线程组 1-1,6,main]
java.lang.NoClassDefFoundError: Could not initialize class io.grpc.netty.NettyChannelBuilder
    at io.grpc.netty.NettyChannelProvider.builderForTarget(NettyChannelProvider.java:43) ~[rocksdb-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    at io.grpc.netty.NettyChannelProvider.builderForTarget(NettyChannelProvider.java:24) ~[rocksdb-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    at io.grpc.ManagedChannelBuilder.forTarget(ManagedChannelBuilder.java:76) ~[rocksdb-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    at com.zhaopin.perf.RocksDBPerf.setupTest(RocksDBPerf.java:29) ~[rocksdb-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
    at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:194) ~[ApacheJMeter_java.jar:5.4.1]
    at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:638) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:558) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) ~[ApacheJMeter_core.jar:5.4.1]
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) ~[ApacheJMeter_core.jar:5.4.1]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_291]

详细看了下错误,第一感觉是jar包冲突(因为在本地环境idea中调试脚本正常)

我本地的maven依赖信息如下:


    4.0.0

    org.example
    rocksdb
    1.0-SNAPSHOT
    
        
            com.google.protobuf
            protobuf-java
            3.17.2
        
        
        
            com.google.protobuf
            protobuf-java-util
            3.17.2
        
        
        
            io.grpc
            grpc-all
            1.40.1
        

        
            org.apache.jmeter
            ApacheJMeter_core
            3.2
        
        
            org.apache.jmeter
            ApacheJMeter_java
            3.2
        
        
    
    
        8
        8
    
    
        
            
                kr.motd.maven
                os-maven-plugin
                1.5.0.Final
            
        

        
            
                org.xolstice.maven.plugins
                protobuf-maven-plugin
                0.5.0
                
                    
                        com.google.protobuf:protoc:3.1.0:exe:${os.detected.classifier}
                    
                    grpc-java
                    
                        io.grpc:protoc-gen-grpc-java:1.11.0:exe:${os.detected.classifier}
                    
                
                
                    
                        
                            compile
                            compile-custom
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-assembly-plugin

                
                    
                        
                            com.zhaopin.perf.RocksDBPerf
                        
                    
                    
                        jar-with-dependencies
                    
                
                
                    
                        make-assembly
                        package
                        
                            single
                        
                    
                
            

        
    

解决思路:

1、手工把错误涉及的jar包(grpc-netty-1.40.1.jar)放到 jmeter的 bin/exp目录下-------错误依旧

2、认为单个jar包版本冲突问题,就将grpc-netty包单独在pom文件中引入最新版本(由1.40.1升级为1.42.1)-------错误依旧

3、重新从jmeter官网,下载了个纯净版jmeter5.4.1,把压测脚本打包成的jar放到bin/exp目录下-----调用压测接口成功。

jmeter报错java.lang.NoClassDefFoundError: Could not initialize class io.grpc.netty.NettyChannelBuilder_第1张图片

jmeter报错java.lang.NoClassDefFoundError: Could not initialize class io.grpc.netty.NettyChannelBuilder_第2张图片

你可能感兴趣的:(Jmeter,JAVA,java,.net,开发语言)