2384d59b2a2a5eea9e60c36028a4d1fbd4960ead
redis\345\223\250\345\205\265\346\250\241\345\274\217\345\234\272\346\231\257\346\265\213\350\257\225.md
| ... | ... | @@ -396,14 +396,153 @@ todo |
| 396 | 396 | |
| 397 | 397 | ### 场景4:模拟大量卸载安装 |
| 398 | 398 | |
| 399 | -todo |
|
| 400 | - |
|
| 401 | 399 | **步骤**: |
| 402 | 400 | 用脚本进行一晚的安装卸载APP,测试是否有问题 |
| 403 | 401 | **验证方式**: |
| 404 | 402 | 使用Topic检查文档(我之前提供的文档),检查对应的客户端能否正常及时消费 |
| 405 | 403 | 检查slowlog是否有超过200ms的执行命令 |
| 406 | 404 | |
| 405 | +**实际测试结果** |
|
| 406 | + |
|
| 407 | +停止掉主节点后,由于redis哨兵集群配置是60s超时,所以在此期间一直报错: |
|
| 408 | +``` |
|
| 409 | + 2025-08-13 17:46:39.925 [http-nio-8060-exec-2] ERROR o.a.c.c.C.[.[localhost].[/].[dispatcherServlet] -Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception |
|
| 410 | + |
|
| 411 | + com.sie.snest.engine.exception.ModelException: Unable to write command into connection! Check CPU usage of the JVM. Try to increase nettyThreads setting. Node source: NodeSource [slot=0, addr=null, redisClient=null, redirect=null, entry=null], connection: RedisConnection@1440995011 [redisClient=[addr=redis://192.168.184.122:6379], channel=[id: 0x0c4c951d, L:0.0.0.0/0.0.0.0:60620], currentCommand=null, usage=1], command: (GET), params: [iidp:open_api:route:/checkhealth] after 3 retry attempts |
|
| 412 | + |
|
| 413 | + at com.sie.snest.engine.model.MethodMeta.invoke(MethodMeta.java:217) |
|
| 414 | + |
|
| 415 | + at com.sie.snest.engine.api.distributed.RpcInvocationV2.invoke(RpcInvocationV2.java:168) |
|
| 416 | + |
|
| 417 | + at com.sie.snest.engine.data.RecordSet.call(RecordSet.java:361) |
|
| 418 | + |
|
| 419 | + at com.sie.snest.sdk.cache.RedisHelper.get(RedisHelper.java:26) |
|
| 420 | + |
|
| 421 | + at com.sie.snest.api.transformer.filter.ApiRequestFilter.doFilter(ApiRequestFilter.java:115) |
|
| 422 | + |
|
| 423 | + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) |
|
| 424 | + |
|
| 425 | + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) |
|
| 426 | + |
|
| 427 | + at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124) |
|
| 428 | + |
|
| 429 | + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) |
|
| 430 | + |
|
| 431 | + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) |
|
| 432 | + |
|
| 433 | + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) |
|
| 434 | + |
|
| 435 | + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) |
|
| 436 | + |
|
| 437 | + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) |
|
| 438 | + |
|
| 439 | + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) |
|
| 440 | + |
|
| 441 | + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) |
|
| 442 | + |
|
| 443 | + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) |
|
| 444 | + |
|
| 445 | + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) |
|
| 446 | + |
|
| 447 | + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) |
|
| 448 | + |
|
| 449 | + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) |
|
| 450 | + |
|
| 451 | + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) |
|
| 452 | + |
|
| 453 | + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) |
|
| 454 | + |
|
| 455 | + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) |
|
| 456 | + |
|
| 457 | + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) |
|
| 458 | + |
|
| 459 | + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) |
|
| 460 | + |
|
| 461 | + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) |
|
| 462 | + |
|
| 463 | + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) |
|
| 464 | + |
|
| 465 | + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) |
|
| 466 | + |
|
| 467 | + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) |
|
| 468 | + |
|
| 469 | + at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769) |
|
| 470 | + |
|
| 471 | + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) |
|
| 472 | + |
|
| 473 | + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) |
|
| 474 | + |
|
| 475 | + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) |
|
| 476 | + |
|
| 477 | + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) |
|
| 478 | + |
|
| 479 | + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) |
|
| 480 | + |
|
| 481 | + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) |
|
| 482 | + |
|
| 483 | + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) |
|
| 484 | + |
|
| 485 | + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) |
|
| 486 | + |
|
| 487 | + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) |
|
| 488 | + |
|
| 489 | + at java.lang.Thread.run(Thread.java:748) |
|
| 490 | + |
|
| 491 | + Caused by: org.redisson.client.WriteRedisConnectionException: Unable to write command into connection! Check CPU usage of the JVM. Try to increase nettyThreads setting. Node source: NodeSource [slot=0, addr=null, redisClient=null, redirect=null, entry=null], connection: RedisConnection@1440995011 [redisClient=[addr=redis://192.168.184.122:6379], channel=[id: 0x0c4c951d, L:0.0.0.0/0.0.0.0:60620], currentCommand=null, usage=1], command: (GET), params: [iidp:open_api:route:/checkhealth] after 3 retry attempts |
|
| 492 | + |
|
| 493 | + at org.redisson.command.RedisExecutor.checkWriteFuture(RedisExecutor.java:367) |
|
| 494 | + |
|
| 495 | + at org.redisson.command.RedisExecutor.lambda$execute$4(RedisExecutor.java:197) |
|
| 496 | + |
|
| 497 | + at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) |
|
| 498 | + |
|
| 499 | + at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) |
|
| 500 | + |
|
| 501 | + at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) |
|
| 502 | + |
|
| 503 | + at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) |
|
| 504 | + |
|
| 505 | + at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629) |
|
| 506 | + |
|
| 507 | + at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118) |
|
| 508 | + |
|
| 509 | + at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetFailure(AbstractChannel.java:999) |
|
| 510 | + |
|
| 511 | + at io.netty.channel.AbstractChannel$AbstractUnsafe.write(AbstractChannel.java:860) |
|
| 512 | + |
|
| 513 | + at io.netty.channel.DefaultChannelPipeline$HeadContext.write(DefaultChannelPipeline.java:1367) |
|
| 514 | + |
|
| 515 | + at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:889) |
|
| 516 | + |
|
| 517 | + at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:956) |
|
| 518 | + |
|
| 519 | + at io.netty.channel.AbstractChannelHandlerContext$WriteTask.run(AbstractChannelHandlerContext.java:1263) |
|
| 520 | + |
|
| 521 | + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) |
|
| 522 | + |
|
| 523 | + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) |
|
| 524 | + |
|
| 525 | + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) |
|
| 526 | + |
|
| 527 | + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) |
|
| 528 | + |
|
| 529 | + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) |
|
| 530 | + |
|
| 531 | + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) |
|
| 532 | + |
|
| 533 | + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) |
|
| 534 | + |
|
| 535 | + ... 1 common frames omitted |
|
| 536 | + |
|
| 537 | + Caused by: io.netty.channel.StacklessClosedChannelException: null |
|
| 538 | + |
|
| 539 | + at io.netty.channel.AbstractChannel$AbstractUnsafe.write(Object, ChannelPromise)(Unknown Source) |
|
| 540 | +``` |
|
| 541 | + |
|
| 542 | +待选主成功后,异常终止,redis恢复正常。 |
|
| 543 | + |
|
| 544 | + |
|
| 545 | + |
|
| 407 | 546 | ### 场景5:模拟长时间运行 |
| 408 | 547 | |
| 409 | 548 | 持续进行中 |