server端使用的事2.0, client端使用的是1.4.1 使用了 配置中心 + 服务 配置中心, 我么的使用方式是 特定情况下, 通过sdk 添加或修改配置,
服务的用法是: 应用启动后, 我们会基于Api做服务注册, 因为我们的业务需要区分api, 这种用法会导致, 我们启动后, 同一个应用 可能注册几十甚至几百个服务
运行一段时间后, Nacos Server 会出现假死问题, 所有请求都无法处理, cpu 内存正常, tocat的线程池已经用尽
我们的产品特性,需要这样使用,才能满足产品需求. 这种使用方式有没有问题, 请问如何排除假死的问题,
原提问者GitHub用户hsoftxl
首先说,你们这种使用方式肯定是有问题的,这种情况没有根治的解决方案,但是可以从不同角度去优化这种情况,这种情况最好是从你应用本身去考虑,考虑一下几点:
1、再大的 tomcat 线程池在这种业务场景下都会被用尽,因为这是你们的产品需求规定的,所以从这里优化不太现实。
2、注册到 Nacos 中的服务是否都是即时需要的,如果是,请看第 3 点,如果不是,请将你们的 api 注入到 redis 或消息队列中,然后为每个 api 设置一个计数器和过期时间,一旦这个 api 所代表的服务被调用,计数器的值就加一,过期时间同时延长一定的时间,如果这个 api 所代表的服务很长时间没有被调用,则计数器的值就减一,直到计数器的值减到零时,在 Nacos 中手动销毁这个 api 所代表的服务,同时清除redis或消息队列中的 api 数据,以此重复。这样一来,你们的 tomcat 在某一时间段内的线程数并不是逐步递增的,这样的话就会在某一时间段后腾出一些可用的 tomcat 线程池空间。
3、由于你们注册到 Nacos 中的服务都是即时需要的,所以最重要的一点就是要保持服务的活跃性,所以可以考虑部署多个 Nacos Server 节点,各个节点之间通过互相访问的手段实现 Nacos Server 高可用集群,然后在你们的应用中引入负载均衡,并采用权重算法去分配每个请求所分配到 Nacos Server 节点上的次数。 这是比较容易实现的几点建议,可以考虑一下。
原回答者GitHub用户SteafanMrZhou
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。