Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nacos grpc 如何压测? #11993

Open
huayangchan opened this issue Apr 21, 2024 · 7 comments
Open

nacos grpc 如何压测? #11993

huayangchan opened this issue Apr 21, 2024 · 7 comments
Labels
kind/question Category issues related to questions or problems

Comments

@huayangchan
Copy link

huayangchan commented Apr 21, 2024

想对nacos的grpc做压测,用postman尝试通过grpc发起一个ServiceListRequest,
{
"body": {
"type_url": "",
"value": "IntcImhlYWRlcnNcIjp7fSxcIm5hbWVzcGFjZVwiOlwicHVibGljXCIsXCJzZXJ2aWNlTmFtZVwiOlwiXCIsXCJncm91cE5hbWVcIjpcIkRFRkFVTFRfR1JPVVBcIixcInBhZ2VOb1wiOjEsXCJwYWdlU2l6ZVwiOjIxNDc0ODM2NDcsXCJtb2R1bGVcIjpcIm5hbWluZ1wifSI"
},
"metadata": {
"type": "ServiceListRequest",
"clientIp": "127.0.0.1"
}
}
但返回
{
"metadata": {
"headers": {},
"type": "ErrorResponse",
"clientIp": ""
},
"body": {
"type_url": "",
"value": "eyJyZXN1bHRDb2RlIjo1MDAsImVycm9yQ29kZSI6MzAxLCJtZXNzYWdlIjoiQ29ubmVjdGlvbiBpcyB1bnJlZ2lzdGVyZWQuIiwic3VjY2VzcyI6ZmFsc2V9"
}
}
将响应中的value中进行解码得到:
{"resultCode":500,"errorCode":301,"message":"Connection is unregistered.","success":false},提示连接未注册,InstanceRequest,HealthCheckRequest也有这种我问题,请问在发起这些请求之前是不是还需要发起别的请求注册连接,才能正常响应ServiceListRequest,InstanceRequest这些请求,能指导一下不。
image

@KomachiSion
Copy link
Collaborator

https://nacos.io/docs/latest/guide/admin/nacos2-naming-benchmark/ 使用nacos-client进行压测

如果要自行模拟请求测试的话, 需要先把连接上之后,先发起ConnectionSetupRequest,注册上连接信息,之后再发起正常的请求。期间需要一直保持HealthCheck

@KomachiSion KomachiSion added the kind/question Category issues related to questions or problems label Apr 22, 2024
@huayangchan
Copy link
Author

我用jmeter+nacos-client试了压测。我是继承了jmeter的AbstractJavaSamplerClient,实现了它的runTest方法,在runTest的方法里先创建好GrpcSdkClient,用GrpcSdkClient.start方法建立起链接,new好注册请求,调用request方法发送请求,但是报错
四月 28, 2024 10:36:23 上午 com.alibaba.nacos.shaded.io.grpc.internal.ManagedChannelOrphanWrapper$ManagedChannelReference cleanQueue
严重: ~* Channel ManagedChannelImpl{logId=25, target=****} was not shutdown properly!!! *~
Make sure to call shutdown()/shutdownNow() and wait until awaitTermination() returns true.
java.lang.RuntimeException: ManagedChannel allocation site
at com.alibaba.nacos.shaded.io.grpc.internal.ManagedChannelOrphanWrapper$ManagedChannelReference.(ManagedChannelOrphanWrapper.java:94)
at com.alibaba.nacos.shaded.io.grpc.internal.ManagedChannelOrphanWrapper.(ManagedChannelOrphanWrapper.java:52)
at com.alibaba.nacos.shaded.io.grpc.internal.ManagedChannelOrphanWrapper.(ManagedChannelOrphanWrapper.java:43)
at com.alibaba.nacos.shaded.io.grpc.internal.AbstractManagedChannelImplBuilder.build(AbstractManagedChannelImplBuilder.java:524)
at com.alibaba.nacos.common.remote.client.grpc.GrpcClient.createNewChannelStub(GrpcClient.java:149)
at com.alibaba.nacos.common.remote.client.grpc.GrpcClient.connectToServer(GrpcClient.java:299)
at com.alibaba.nacos.common.remote.client.RpcClient.start(RpcClient.java:389)
at org.example.chy.JmeterRequest.setupTest(JmeterRequest.java:46)
at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:194)
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570)
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268)
at java.lang.Thread.run(Thread.java:748)

@KomachiSion
Copy link
Collaborator

自行创建的GrpcSdkClient的话,需要您自行管理哈,从报错上看是使用grpc的方式出错了。

建议直接创建NacosNamingSerivce和NacosConfigService进行测试

@huayangchan
Copy link
Author

换成创建NacosNameingService的进行测试,也还是不行,报错了:com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING
报错信息:
2024-04-29 13:08:55,864 INFO c.a.n.c.r.client: [92338cf8-3a64-4fbc-a8e4-159c24bcbed1] RpcClient init label, labels = {module=naming, source=sdk}
2024-04-29 13:08:55,983 INFO c.a.n.p.a.s.c.ClientAuthPluginManager: [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success.
2024-04-29 13:08:55,983 INFO c.a.n.p.a.s.c.ClientAuthPluginManager: [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success.
2024-04-29 13:08:56,111 INFO o.e.c.JmeterRequest: namingService creat scuess
2024-04-29 13:08:56,112 INFO o.a.j.s.SampleResult: Note: Sample TimeStamps are START times
2024-04-29 13:08:56,112 INFO o.a.j.s.SampleResult: sampleresult.default.encoding is set to UTF-8
2024-04-29 13:08:56,112 INFO o.a.j.s.SampleResult: sampleresult.useNanoTime=true
2024-04-29 13:08:56,112 INFO o.a.j.s.SampleResult: sampleresult.nanoThreadSleep=5000
2024-04-29 13:08:56,440 ERROR o.e.c.JmeterRequest: registry failed
2024-04-29 13:08:56,441 ERROR o.a.j.t.JMeterThread: Error while processing sampler: 'Java Request'.
java.lang.RuntimeException: ErrCode:500, ErrMsg:Request nacos server failed:
at org.example.chy.RegisterRequest.runTest(RegisterRequest.java:36) ~[nacos-grpc-chy-1.0-SNAPSHOT.jar:?]
at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:197) ~[ApacheJMeter_java.jar:5.6.3]
at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651) ~[ApacheJMeter_core.jar:5.6.3]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570) ~[ApacheJMeter_core.jar:5.6.3]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) [ApacheJMeter_core.jar:5.6.3]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) [ApacheJMeter_core.jar:5.6.3]
at java.base/java.lang.Thread.run(Thread.java:842) [?:?]
Caused by: com.alibaba.nacos.api.exception.NacosException: Request nacos server failed:
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:288) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:128) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:114) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:94) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:145) ~[nacos-client-2.1.0.jar:?]
at org.example.chy.RegisterRequest.runTest(RegisterRequest.java:22) ~[nacos-grpc-chy-1.0-SNAPSHOT.jar:?]
... 6 more
Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING
at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:651) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.common.remote.client.RpcClient.request(RpcClient.java:631) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.requestToServer(NamingGrpcClientProxy.java:278) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.doRegisterService(NamingGrpcClientProxy.java:128) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.remote.gprc.NamingGrpcClientProxy.registerService(NamingGrpcClientProxy.java:114) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:94) ~[nacos-client-2.1.0.jar:?]
at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:145) ~[nacos-client-2.1.0.jar:?]
at org.example.chy.RegisterRequest.runTest(RegisterRequest.java:22) ~[nacos-grpc-chy-1.0-SNAPSHOT.jar:?]
... 6 more

@KomachiSion
Copy link
Collaborator

Client not connected, current status:STARTING

说明客户端没连上服务端, 排查一下配置是否正确,比如host,端口,以及网络本身是否正常。

@huayangchan
Copy link
Author

Client not connected, current status:STARTING

说明客户端没连上服务端, 排查一下配置是否正确,比如host,端口,以及网络本身是否正常。

我把nacos的项目中的nacos-client模块本地打包,放在jmeter里用,服务能注册上,用maven仓中的nacos-client反而不行

@KomachiSion
Copy link
Collaborator

那就不清楚了,社区的压测也是拿jmeter构建nacos-client进行的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/question Category issues related to questions or problems
Projects
None yet
Development

No branches or pull requests

2 participants