开发者社区 > 云原生 > 微服务 > 正文

MSE微服务引擎在什么情况下会出现这个 auto clean 啊?

MSE微服务引擎在什么情况下会出现这个 auto clean 啊?Nacos Server 2.2.0 单机部署,客户端的 9849 连接还在,并没有意识到已被踢下线。2023-09-01 10:36:45,963 WARN namespace : 84186fcf-e4c8-4d94-871a-872600f2a69a, [YT_PUBLIC@@YT.Gaea.User] services are automatically cleaned

展开
收起
三分钟热度的鱼 2023-09-04 19:23:10 95 0
12 条回答
写回答
取消 提交回答
  • MSE微服务引擎在以下情况下可能会出现"auto clean":

    内存不足:当MSE引擎运行时,如果内存不足,系统可能会自动清理一些不必要的缓存或数据,以释放内存空间。
    垃圾回收:MSE引擎可能会定期执行垃圾回收操作,清理不再使用的对象和资源,以优化性能和提高内存利用率。
    运行时错误:当MSE引擎在运行过程中发生错误或异常时,系统可能会自动触发清理操作,以恢复或修复错误状态。
    需要注意的是,具体的"auto clean"操作是由MSE引擎的实现决定的,可能会因不同的引擎而有所不同。此外,"auto clean"的行为通常是自动进行的,用户无需手动干预。

    2023-10-31 10:54:53
    赞同 5 展开评论 打赏
  • MSE微服务引擎在以下情况下会出现自动清理:

    1. 当客户端与MSE微服务引擎的连接断开时,MSE会自动清理不再使用的客户端连接。
    2. 当MSE微服务引擎检测到某个客户端长时间未发送任何请求时,MSE会自动清理该客户端的连接。
    3. 当MSE微服务引擎检测到某个客户端的负载过高或资源占用过多时,MSE会自动清理该客户端的连接。
    4. 当MSE微服务引擎检测到某个客户端的连接数超过预设的限制时,MSE会自动清理一些旧的客户端连接,以便为新的客户端连接腾出空间。
    5. 当MSE微服务引擎检测到某个客户端的连接数低于预设的阈值时,MSE会自动清理一些旧的客户端连接,以节省资源。
    2023-10-26 11:48:31
    赞同 5 展开评论 打赏
  • 当Nacos Server检测到注册的实例长时间未发送心跳时,会触发auto clean机制,自动清理该实例信息。
    会出现auto clean的常见情况:

    1. 服务实例异常退出,没有正常下线
    2. 实例与注册中心之间的网络不通,心跳无法发送
    3. 实例的心跳配置错误,间隔时间太长
    4. 服务实例占用端口被释放,但实例注册信息还残留在Nacos
    5. 节点时间不同步,心跳判断失效
    6. Nacos实例长时间重启,实例注册信息过期
      从您的日志来看,可能是某些服务实例长时间未发送心跳,被Nacos判定为不健康实例并被清理了。
      建议检查可能导致心跳失败的原因:
    7. 服务进程是否正常运行
    8. 网络策略是否允许与Nacos的通信
    9. Nacos客户端心跳配置参数是否正确
    10. 调整心跳间隔时间,不要太长
    11. 检查机器时间是否同步
    12. 重启时检查实例状态,及时下线
      可以结合实例启动日志、心跳日志、网络情况等综合分析。找到心跳断开的原因,调整后可避免auto clean。
    2023-10-25 17:30:47
    赞同 5 展开评论 打赏
  • 从EmptyServiceAutoClean配置中查看 避免暴力删除当服务的回收标志次数大于回收阈值(默认为3次),执行删除服务。即提示:services are automatically cleaned。

        private class EmptyServiceAutoClean implements Runnable {
    
            @Override
            public void run() {
    
                // 开启并行处理的临界值
                int parallelSize = 100;
    
                serviceMap.forEach((namespace, stringServiceMap) -> {
                    Stream<Map.Entry<String, Service>> stream = null;
                    // 若当前服务集合数量大于100,开启并行流处理
                    if (stringServiceMap.size() > parallelSize) {
                        stream = stringServiceMap.entrySet().parallelStream();
                    } else {
                        stream = stringServiceMap.entrySet().stream();
                    }
                    stream.filter(entry -> {
                        final String serviceName = entry.getKey();
                        return distroMapper.responsible(serviceName);
                    }).forEach(entry -> stringServiceMap.computeIfPresent(entry.getKey(), (serviceName, service) -> {
                        if (service.isEmpty()) {
    
                            if (service.getFinalizeCount() > maxFinalizeCount) {
                                Loggers.SRV_LOG.warn("namespace : {}, [{}] services are automatically cleaned", namespace,
                                        serviceName);
                                try {
                                    easyRemoveService(namespace, serviceName);
                                } catch (Exception e) {
                                    Loggers.SRV_LOG.error("namespace : {}, [{}] services are automatically clean has "
                                            + "error : {}", namespace, serviceName, e);
                                }
                            }
    
                            service.setFinalizeCount(service.getFinalizeCount() + 1);
    
                            Loggers.SRV_LOG
                                    .debug("namespace : {}, [{}] The number of times the current service experiences "
                                                    + "an empty instance is : {}", namespace, serviceName,
                                            service.getFinalizeCount());
                        } else {
                            service.setFinalizeCount(0);
                        }
                        return service;
                    }));
                });
            }
        }
    
    2023-10-23 08:04:04
    赞同 5 展开评论 打赏
  • MSE微服务引擎在以下情况下可能会出现"auto clean":

    内存不足:当MSE引擎运行时,如果内存不足,系统可能会自动清理一些不必要的缓存或数据,以释放内存空间。
    垃圾回收:MSE引擎可能会定期执行垃圾回收操作,清理不再使用的对象和资源,以优化性能和提高内存利用率。
    运行时错误:当MSE引擎在运行过程中发生错误或异常时,系统可能会自动触发清理操作,以恢复或修复错误状态。
    需要注意的是,具体的"auto clean"操作是由MSE引擎的实现决定的,可能会因不同的引擎而有所不同。此外,"auto clean"的行为通常是自动进行的,用户无需手动干预。

    2023-10-18 16:55:17
    赞同 5 展开评论 打赏
  • 根据您提供的信息,MSE微服务引擎在Nacos Server 2.2.0 单机部署的情况下,出现了一个名为auto clean的功能。这个功能可能会在以下情况下被触发:

    1. 当Nacos Server检测到客户端连接超时或异常时,会自动关闭该客户端的连接,并将其从服务列表中删除。
    2. 当Nacos Server的内存资源不足时,也会自动关闭一些连接,以释放内存资源。
    3. 当Nacos Server的服务列表过大,需要进行清理时,也会触发auto clean功能。
      根据您提供的日志信息,可以看出在2023-09-01 10:36:45,963时,Nacos Server自动清理了客户端的连接。这可能是由于客户端连接超时或异常,或者Nacos Server的内存资源不足等原因导致的。
    2023-10-18 15:10:00
    赞同 5 展开评论 打赏
  • 北京阿里云ACE会长

    MSE(Micro Service Engine)微服务引擎中的自动清理(auto clean)功能主要是用于清理长时间没有活跃请求的服务实例。当一个服务实例长时间没有被请求时,MSE 引擎会认为这个服务实例可能不再需要,从而进行自动清理,以节省资源。
    在 Nacos Server 2.2.0 单机部署的情况下,如果客户端的 9849 连接还在,但是没有活跃请求,那么 MSE 引擎可能会在某个时间点触发自动清理功能,将这个服务实例清理掉。
    你提到的日志信息:“2023-09-01 10:36:45,963 WARN namespace : 84186fcf-e4c8-4d94-871a-872600f2a69a, [YT_PUBLIC@@YT.Gaea.User] services are automatically cleaned”,就是在提示你有一个服务实例被自动清理了。

    2023-10-17 21:22:52
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    日志消息"services are automatically cleaned"表明系统正在尝试自动清理这些连接,但它们并未如预期般被删除。
    这可能有几个原因。一种可能性是客户端连接没有被客户端应用程序正确关闭。在这种情况下,您可能需要审查客户端应用程序的代码,以确保在不再需要时正确关闭连接。
    另一种可能性是MSE微服务引擎中存在一个导致连接未正确清理的错误。在这种情况下,您可能需要向MSE支持团队或社区论坛报告问题以寻求进一步的帮助。
    也有可能是该日志消息是配置错误,或者错误来自系统中的其他部分。我建议您检查日志文件和系统配置,以获取有关问题的更多信息。

    2023-10-17 17:05:04
    赞同 展开评论 打赏
  • 在MSE微服务引擎中,"auto clean"(自动清理)通常出现在服务注册中心或注册配置中心的实例信息中,表示自动清理机制正在运行。

    "auto clean" 是MSE引擎为了保持注册中心和注册配置中心的数据的一致性和可靠性而提供的功能。当一个服务实例在注册中心或注册配置中心注销时,MSE引擎会自动将该实例的信息进行清理,以确保不再显示已注销的实例。

    以下是一些可能的情况,会导致出现 "auto clean":

    服务实例注销:当一个服务实例主动注销或由于某种原因从注册中心或注册配置中心中注销时,MSE引擎会自动触发 "auto clean" 机制。这可以是由服务实例的关闭、网络故障或其他原因引起的。

    超时注销:MSE引擎可能会设置超时时间,如果服务实例在超过一定时间内没有发送心跳或保持连接,MSE会将其自动注销。在这种情况下,MSE会执行 "auto clean" 操作,清理已超时的实例信息。

    2023-10-16 18:48:47
    赞同 展开评论 打赏
  • 在 MSE 微服务引擎中,"auto clean" 是指 Nacos 服务器自动清理过期的服务实例。当一个服务实例的到期时间到达或超过设定的阈值时,Nacos 服务器会将该实例从服务注册表中自动清理掉。

    根据您提供的日志信息,警告消息中显示了一个命名空间(namespace)和服务(services)。其中,“[YT_PUBLIC@@YT.Gaea.User] services are automatically cleaned” 表示这个命名空间下的某些服务已被自动清理。

    可能的原因如下:

    1. 到期时间设置:检查您服务实例的注册信息中是否设置了到期时间。如果没有设置或设置不正确,Nacos 服务器可能无法正确判断实例是否过期。

    2. 配置错误:确保您在配置中心设置的过期时间与实际需求一致,并且配置中心的配置在部署时生效。

    3. Nacos 版本兼容性问题:请确保您使用的 Nacos Server 版本与 MSE 微服务引擎版本兼容。某些特定版本之间可能存在兼容性问题。

    2023-10-15 15:38:52
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    当使用 MSE(微服务引擎)与 Nacos Server 2.2.0 单机部署时,出现 "auto clean" 的警告消息通常意味着服务注册信息在 Nacos 中被自动清理。

    此警告消息表明某个命名空间(namespace)中的服务实例已被自动清理。自动清理可能发生在以下情况下:

    1. 健康检查失败:Nacos 会定期对服务进行健康检查,如果某个服务实例的健康检查失败多次,则会被判定为不可用并自动清理。

    2. 注销服务:服务实例主动注销(取消注册)或停止心跳上报后,Nacos 可能会将其自动清理。

    3. 网络问题:如果某个服务实例由于网络问题导致与 Nacos 之间失去连接,Nacos 可能会自动清理该实例。

    在您提供的日志中,警告消息中记录了 namespace(命名空间)和服务名 [YT_PUBLIC@@YT.Gaea.User]。这意味着名为 YT_PUBLIC@@YT.Gaea.User 的服务在指定的命名空间中被自动清理。

    要解决这个问题,您可以考虑以下步骤:

    1. 检查服务实例的运行状态和健康检查配置,确保服务实例正常运行并通过健康检查。

    2. 检查网络连接,确保服务实例能够正常与 Nacos 服务器进行通信。

    3. 检查服务注册的代码逻辑,确保没有在不需要的情况下主动注销服务。

    4. 更新 Nacos 版本:如果问题仍然存在,尝试升级到最新版本的 Nacos Server,以获取可能的 bug 修复和功能改进。

    2023-10-15 15:02:29
    赞同 展开评论 打赏
  • MSE微服务引擎中的auto clean功能是为了保持Nacos服务的稳定性。当客户端长时间没有与服务器通信时,服务器会自动清理客户端的连接,以避免服务器负载过大。在您的情况下,客户端的9849连接仍在,并没有意识到已被踢下线,这可能是由于客户端的连接没有正确关闭导致的。建议您检查客户端的连接关闭机制,确保客户端的连接在无用时能够正确关闭。

    2023-10-13 14:49:16
    赞同 展开评论 打赏
滑动查看更多

为微服务建设降本增效,为微服务落地保驾护航。

相关产品

  • 微服务引擎
  • 相关电子书

    更多
    《MSE 微服务网关》 立即下载
    微服务引擎 MSE 治理中心重磅发布 立即下载
    阿里云微服务引擎 MSE 2.0 线上发布 立即下载