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
MSE微服务引擎在以下情况下会出现自动清理:
当Nacos Server检测到注册的实例长时间未发送心跳时,会触发auto clean机制,自动清理该实例信息。
会出现auto clean的常见情况:
从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;
}));
});
}
}
MSE微服务引擎在以下情况下可能会出现"auto clean":
内存不足:当MSE引擎运行时,如果内存不足,系统可能会自动清理一些不必要的缓存或数据,以释放内存空间。
垃圾回收:MSE引擎可能会定期执行垃圾回收操作,清理不再使用的对象和资源,以优化性能和提高内存利用率。
运行时错误:当MSE引擎在运行过程中发生错误或异常时,系统可能会自动触发清理操作,以恢复或修复错误状态。
需要注意的是,具体的"auto clean"操作是由MSE引擎的实现决定的,可能会因不同的引擎而有所不同。此外,"auto clean"的行为通常是自动进行的,用户无需手动干预。
根据您提供的信息,MSE微服务引擎在Nacos Server 2.2.0 单机部署的情况下,出现了一个名为auto clean的功能。这个功能可能会在以下情况下被触发:
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”,就是在提示你有一个服务实例被自动清理了。
日志消息"services are automatically cleaned"表明系统正在尝试自动清理这些连接,但它们并未如预期般被删除。
这可能有几个原因。一种可能性是客户端连接没有被客户端应用程序正确关闭。在这种情况下,您可能需要审查客户端应用程序的代码,以确保在不再需要时正确关闭连接。
另一种可能性是MSE微服务引擎中存在一个导致连接未正确清理的错误。在这种情况下,您可能需要向MSE支持团队或社区论坛报告问题以寻求进一步的帮助。
也有可能是该日志消息是配置错误,或者错误来自系统中的其他部分。我建议您检查日志文件和系统配置,以获取有关问题的更多信息。
在MSE微服务引擎中,"auto clean"(自动清理)通常出现在服务注册中心或注册配置中心的实例信息中,表示自动清理机制正在运行。
"auto clean" 是MSE引擎为了保持注册中心和注册配置中心的数据的一致性和可靠性而提供的功能。当一个服务实例在注册中心或注册配置中心注销时,MSE引擎会自动将该实例的信息进行清理,以确保不再显示已注销的实例。
以下是一些可能的情况,会导致出现 "auto clean":
服务实例注销:当一个服务实例主动注销或由于某种原因从注册中心或注册配置中心中注销时,MSE引擎会自动触发 "auto clean" 机制。这可以是由服务实例的关闭、网络故障或其他原因引起的。
超时注销:MSE引擎可能会设置超时时间,如果服务实例在超过一定时间内没有发送心跳或保持连接,MSE会将其自动注销。在这种情况下,MSE会执行 "auto clean" 操作,清理已超时的实例信息。
在 MSE 微服务引擎中,"auto clean" 是指 Nacos 服务器自动清理过期的服务实例。当一个服务实例的到期时间到达或超过设定的阈值时,Nacos 服务器会将该实例从服务注册表中自动清理掉。
根据您提供的日志信息,警告消息中显示了一个命名空间(namespace)和服务(services)。其中,“[YT_PUBLIC@@YT.Gaea.User] services are automatically cleaned” 表示这个命名空间下的某些服务已被自动清理。
可能的原因如下:
到期时间设置:检查您服务实例的注册信息中是否设置了到期时间。如果没有设置或设置不正确,Nacos 服务器可能无法正确判断实例是否过期。
配置错误:确保您在配置中心设置的过期时间与实际需求一致,并且配置中心的配置在部署时生效。
Nacos 版本兼容性问题:请确保您使用的 Nacos Server 版本与 MSE 微服务引擎版本兼容。某些特定版本之间可能存在兼容性问题。
当使用 MSE(微服务引擎)与 Nacos Server 2.2.0 单机部署时,出现 "auto clean" 的警告消息通常意味着服务注册信息在 Nacos 中被自动清理。
此警告消息表明某个命名空间(namespace)中的服务实例已被自动清理。自动清理可能发生在以下情况下:
健康检查失败:Nacos 会定期对服务进行健康检查,如果某个服务实例的健康检查失败多次,则会被判定为不可用并自动清理。
注销服务:服务实例主动注销(取消注册)或停止心跳上报后,Nacos 可能会将其自动清理。
网络问题:如果某个服务实例由于网络问题导致与 Nacos 之间失去连接,Nacos 可能会自动清理该实例。
在您提供的日志中,警告消息中记录了 namespace(命名空间)和服务名 [YT_PUBLIC@@YT.Gaea.User]。这意味着名为 YT_PUBLIC@@YT.Gaea.User 的服务在指定的命名空间中被自动清理。
要解决这个问题,您可以考虑以下步骤:
检查服务实例的运行状态和健康检查配置,确保服务实例正常运行并通过健康检查。
检查网络连接,确保服务实例能够正常与 Nacos 服务器进行通信。
检查服务注册的代码逻辑,确保没有在不需要的情况下主动注销服务。
更新 Nacos 版本:如果问题仍然存在,尝试升级到最新版本的 Nacos Server,以获取可能的 bug 修复和功能改进。
MSE微服务引擎中的auto clean功能是为了保持Nacos服务的稳定性。当客户端长时间没有与服务器通信时,服务器会自动清理客户端的连接,以避免服务器负载过大。在您的情况下,客户端的9849连接仍在,并没有意识到已被踢下线,这可能是由于客户端的连接没有正确关闭导致的。建议您检查客户端的连接关闭机制,确保客户端的连接在无用时能够正确关闭。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。