Channel ManagedChannelImpl 未正确关闭

2024-02-05

如果我运行这两个测试,我会收到错误。

1st test

@Rule
public GrpcCleanupRule grpcCleanup = new GrpcCleanupRule();

@Test
public void findAll() throws Exception {
    // Generate a unique in-process server name.
    String serverName = InProcessServerBuilder.generateName();

    // Create a server, add service, start, and register for automatic graceful shutdown.
    grpcCleanup.register(InProcessServerBuilder
            .forName(serverName)
            .directExecutor()
            .addService(new Data(mockMongoDatabase))
            .build()
            .start());

    // Create a client channel and register for automatic graceful shutdown.
    RoleServiceGrpc.RoleServiceBlockingStub stub = RoleServiceGrpc.newBlockingStub(
            grpcCleanup.register(InProcessChannelBuilder
                    .forName(serverName)
                    .directExecutor()
                    .build()));

    RoleOuter.Response response = stub.findAll(Empty.getDefaultInstance());
    assertNotNull(response);
}

2nd test

@Test
public void testFindAll() {
    ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8081)
            .usePlaintext()
            .build();

    RoleServiceGrpc.RoleServiceBlockingStub stub = RoleServiceGrpc.newBlockingStub(channel);
    RoleOuter.Response response = stub.findAll(Empty.newBuilder().build());
    assertNotNull(response);
}

io.grpc.internal.ManagedChannelOrphanWrapper$ManagedChannelReference cleanQueue 严重:~~~ 频道 ManagedChannelImpl{logId=1, target=localhost:8081} 未正确关闭! ~~~确保调用 shutdown()/shutdownNow() 并等待直到awaitTermination() 返回 true。

java.lang.RuntimeException:ManagedChannel 分配站点 在 io.grpc.internal.ManagedChannelOrphanWrapper$ManagedChannelReference。(ManagedChannelOrphanWrapper.java:94)

如果我注释掉其中之一,则不会出现错误,单元测试会通过,但如果两者一起运行,则会引发异常。

Edit

根据建议。

@Test
public void testFindAll() {
    ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8081)
            .usePlaintext()
            .build();

    RoleServiceGrpc.RoleServiceBlockingStub stub = RoleServiceGrpc.newBlockingStub(channel);
    RoleOuter.Response response = stub.findAll(Empty.newBuilder().build());
    assertNotNull(response);

    channel.shutdown();
}

嘿,我刚刚使用 Dialogflow V2 Java SDK 遇到了类似的问题,收到了错误

 Oct 19, 2019 4:12:23 PM io.grpc.internal.ManagedChannelOrphanWrapper$ManagedChannelReference cleanQueue
SEVERE: *~*~*~ Channel ManagedChannelImpl{logId=41, target=dialogflow.googleapis.com:443} was not shutdown properly!!! ~*~*~*
    Make sure to call shutdown()/shutdownNow() and wait until awaitTermination() returns true.

此外,拥有庞大的客户群,我们开始遇到out of memory unable to create native thread error.

在执行大量调试操作和使用 Visual VM 线程监控之后,我终于发现问题是由于SessionsClient不关闭。所以我使用附加的代码块来解决这个问题。在测试该块后,我终于能够释放所有使用的线程,并且前面提到的错误也得到了解决。

SessionsClient sessionsClient = null;
QueryResult queryResult = null;

try {
    SessionsSettings.Builder settingsBuilder = SessionsSettings.newBuilder();
    SessionsSettings sessionsSettings = settingsBuilder
            .setCredentialsProvider(FixedCredentialsProvider.create(credentials)).build();
    sessionsClient = SessionsClient.create(sessionsSettings);
    SessionName session = SessionName.of(projectId, senderId);
    com.google.cloud.dialogflow.v2.TextInput.Builder textInput = TextInput.newBuilder().setText(message)
            .setLanguageCode(languageCode);
    QueryInput queryInput = QueryInput.newBuilder().setText(textInput).build();

    DetectIntentResponse response = sessionsClient.detectIntent(session, queryInput);

    queryResult = response.getQueryResult();
} catch (Exception e) {
    e.printStackTrace();
}
finally {
    sessionsClient.close();
}

图表中较短的值突出显示了 client.close() 的使用。如果没有这个,线程就会陷入停车状态。 https://i.stack.imgur.com/49JEt.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Channel ManagedChannelImpl 未正确关闭 的相关文章

  • 我在socket上设置了超时,发现这个值不能大于21

    我在socket上设置了超时 该值小于21秒才有效 21秒后发现超时还是21秒 public static void main String args SimpleDateFormat sdf new SimpleDateFormat yy
  • jvm 次要版本与编译器次要版本

    当运行使用具有相同主要版本但次要版本高于 JVM 的 JDK 编译的类时 JVM 会抛出异常吗 JDK 版本并不重要 类文件格式版本 http blogs oracle com darcy entry source target class
  • GRPC/C++ - 如何检测异步服务器中客户端断开连接

    我正在使用这个代码example https github com grpc grpc blob v1 32 0 examples cpp helloworld greeter async server cc创建我的 GRPC 异步服务器
  • 防止 Spring Boot 注册 Spring Security 过滤器之一

    我想禁用安全链中的 Spring Security 过滤器之一 我已经看到了防止 Spring Boot 注册 servlet 过滤器 https stackoverflow com questions 28421966 prevent s
  • URL.setURLStreamHandlerFactory

    我正在使用带有嵌入式 Jetty 的可执行 jar 开发一个 Web 应用程序 我的jar包含一个依赖jar jar in jar 我参考了JarRsrcLoader and RsrcURLStreamHandlerFactory由 Ecl
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • 如何开始使用 Chainsaw for Log4j?

    我想开始使用 Chainsaw v2 几乎没有关于它的信息 我只找到了this http www velocityreviews com forums t140105 help using chainsaw for log4j html 但
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • Intellij 中的 Google OR-Tools:UnsatisfiedLinkError

    我正在建立一个应该使用 Google OR Tools 的 java 框架 下面的代码编译成功 但在运行时抛出异常 Exception in thread main java lang UnsatisfiedLinkError com go
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • 在 Java 中将弯音发送到 MIDI 音序器

    我了解启动和运行 MIDI 音序器的基础知识 并且希望能够在播放过程中增加 减小序列的音高 但弯音是发送到合成器而不是音序器的消息 我尝试将音序器的接收器设置为合成器的发射器 当我发送弯音短消息时 音序器保持相同的音调 但随后合成器以新的弯
  • 创建正则表达式匹配数组

    在Java中 我试图将所有正则表达式匹配返回到一个数组 但似乎您只能检查模式是否匹配某些内容 布尔值 如何使用正则表达式匹配来形成与给定字符串中的正则表达式匹配的所有字符串的数组 4城堡的回答 https stackoverflow com
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 为什么我的代码会产生错误:该语句没有返回结果集[重复]

    这个问题在这里已经有答案了 我正在从 Microsoft SQL Server Studio 执行以下查询 该查询工作正常并显示结果 SELECT INTO temp table FROM md criteria join WHERE us
  • 如何初始化静态地图?

    你会如何初始化静态Map在Java中 方法一 静态初始化方法二 实例初始化 匿名子类 或者 还有其他方法吗 各自的优点和缺点是什么 这是说明这两种方法的示例 import java util HashMap import java util
  • 春季 CORS。在允许的来源中添加模式

    查看CORS的弹簧指南 以下代码启用所有允许的来源 public class MyWebMVCConfigurer extends WebMvcConfigurerAdapter Override public void addCorsMa
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分

随机推荐

  • Windows 7 中将包含哪个 .NET 框架版本? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 有谁知道微
  • 如何从本地运行的 Spark Shell 连接到 Spark EMR

    我已经创建了一个 Spark EMR 集群 我想在本地主机或 EMR 集群上执行作业 假设我在本地计算机上运行 Spark shell 如何告诉它连接到 Spark EMR 集群 确切的配置选项和 或要运行的命令是什么 看起来其他人在这方面
  • std::unique_ptr、删除器和 Win32 API

    在VC2012中 我想使用唯一指针和删除器在构造函数中创建互斥体 这样我就不需要创建析构函数来调用CloseHandle 我本以为这会起作用 struct foo std unique ptr
  • AJAX 请求之前单击按钮的客户端验证

    我正在使用 MVC 4 我希望能够验证表中行集合中的单行 以确保正确输入字段并通过验证 属性已正确应用于模型 例如 Required MaxLength 50 MinLength 5 public string Name get set 现
  • 生成HMAC SHA256签名Python

    尝试为 3Commas 生成 HMAC SHA256 签名 我使用与官方示例 https github com 3commas io 3commas official api docs blob master rest api md exa
  • PHP Lucene - 索引 - 在 Linux 中经过 2.000.000 个系统块后失败

    我一直致力于使用 Zend Framework 最新版本创建索引 界面工作正常 其他一切都正常 我现在遇到的问题是 重新索引 或创建索引 我已经检查了其他所有内容 清理了数据并仔细检查了数据的质量 该进程总是在最有可能的记录 15 000
  • 如何通过网络发送类

    我有以下问题 我想通过线路发送类型 java lang Class 并在另一端 定义 该类 我这样尝试过 ByteArrayOutputStream bos new ByteArrayOutputStream ObjectOutputStr
  • 如何在android中的sdcard中创建文件夹

    我想在我的 SD 卡中创建文件夹 我使用了下面的代码 public class Screen extends Activity Override protected void onCreate Bundle savedInstanceSta
  • 通用 Windows 平台中未找到文件异常

    请帮助我 我在某个异步方法内有以下 C 代码行 并且我使用通用 Windows 平台 Windows 10 SDK 10 0 14393 var file await StorageFile GetFileFromApplicationUr
  • 检测锁定的表(由 LOCK TABLE 锁定)

    有没有办法检测 MySQL 中锁定的表 我的意思是表被锁定LOCK TABLE table WRITE READ命令 Note that readers interested in detecting named locks acquire
  • 如何在没有填充区域的情况下设置 div 背景

    我在 CSS 上有这样的课程 mgmtError width 716px float left background color FF0000 padding 10px text align center 我想为背景着色而不是在填充区域 我
  • 如何在 webpack 中使用快捷路径“@”?

    我用我的 package json 执行了 npm run build 我收到了这条消息 如何在 webpack 中使用 错误于 node modules babel loader lib node modules vue loader l
  • 如何在实际的 Apple Watch(而不是模拟器中)上强制退出单个应用程序?

    开发应用程序时 有时强制退出应用程序很有用 而无需重新启动整个设备 在我的 iPhone 上 我可以通过双击主页按钮并将应用程序滑动到顶部来强制退出活动应用程序 对于实际的 Apple Watch 不是模拟器 强制退出应用程序特别有用 因为
  • Android - 位图缓存占用大量内存

    我对所有内存管理主题都是新手 所以有很多东西我不明白 我正在尝试在我的应用程序中缓存图像 但我遇到了内存消耗问题 所有位图 Chaching 代码几乎都是从这里复制粘贴的 http developer android com trainin
  • 通过管道id杀死linux进程

    我想杀死一个进程并通过以下方式获取它的 id pgrep f python myscript py 我想打电话 kill s SIGINT 对此 但我找不到任何方法来做到这一点 该命令需要在一行中 尝试使用反引号运算符来评估子命令 kill
  • BizTalk Server 有哪些可行的替代方案? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在评估不同的系统集成策略时 我听到了一些关于 BizTalk Server 的鼓励的话 但也听到了一些
  • 如何在不停止站点的情况下更新 ASP.Net 站点 dll

    是否可以在不停止 IIS 的情况下更新预编译站点的站点 dll 目前 如果我尝试复制新文件来覆盖当前文件 则所有用户在复制文件时都会收到运行时错误 有办法避免这种情况吗 即使您不停止 对 web config 文件 BIN 文件夹 App
  • 如何使用选择文件浏览器的意图来选择文件

    如何使用意图提示用户选择 完成操作 来选择应用程序来选择文件 假设设备中有几个应用程序来浏览文件 我想使用扩展名过滤文件 例如 sav props 先感谢您 你可以使用这样的东西 Intent intent new Intent Inten
  • Mongoid 查找器不工作?

    我已经设置了一个 Rails3 mongoid 应用程序 当我打开 Rails 控制台时 所有查找器似乎都不起作用 http d pr FNzC http d pr FNzC User all User find all condition
  • Channel ManagedChannelImpl 未正确关闭

    如果我运行这两个测试 我会收到错误 1st test Rule public GrpcCleanupRule grpcCleanup new GrpcCleanupRule Test public void findAll throws E