问题 1.jetty集群的吞吐量增加不是两倍关系? 2.分开部署到两个服务器上吞吐量还不如单机? 3.单机部署线程数增加cpu利用率没有上升,吞吐量却下降了? 4.cpu利用率怎么压不满,总是卡在百分之四五十?
配置 服务器:52、54两个服务器,54服务器的硬件配置更好一些 服务层程序:jetty+spring+JDBCTemplate 数据库:oracle11g(只在54上安装了一个) 负载均衡:nginx(安装在54上)
压测情况 
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
针对您提出的问题,我将逐一进行分析和解答:
解答: 在分布式系统中,简单的线性扩展并不总是能实现预期的性能提升。Jetty集群的吞吐量增长非线性的原因可能包括但不限于: - 网络延迟与通信开销:集群间节点通信、会话同步等操作会引入额外的网络延迟和资源消耗。 - 负载不均:如果负载均衡器配置不当或算法不够高效,可能导致某些节点过载而其他节点空闲,影响整体吞吐量。 - 数据库瓶颈:您的数据库仅安装在54服务器上,当集群规模扩大时,数据库可能成为瓶颈,限制了整体性能的提升。
解答: 这种情况通常由以下因素引起: - 资源分配不均:若52服务器的硬件配置远低于54服务器,且未合理分配服务负载,可能会出现总吞吐量下降。 - 配置不一致或优化不足:每个节点的Jetty、Spring及JDBC配置需要根据服务器硬件特性进行适当调整,否则可能无法发挥集群优势。 - 数据库访问集中:所有服务器共享同一数据库服务器(54),可能导致数据库成为瓶颈,尤其是在高并发场景下。
解答: 线程数过多可能导致以下问题: - 上下文切换频繁:过多线程会导致CPU时间花在上下文切换上,而非实际处理请求,从而降低了效率。 - 内存竞争与资源争用:大量线程会增加内存占用,可能导致内存溢出或频繁的垃圾回收,影响应用性能。 - 锁竞争:在多线程环境下,对共享资源的竞争加剧,如数据库连接池、缓存等,这会降低执行效率。
解答: CPU利用率未能充分利用可能由于: - I/O等待:应用程序可能在等待I/O操作完成(如数据库查询、文件读写),导致CPU空闲。 - 单线程瓶颈:部分Java应用组件(如JDBC Template)在执行数据库操作时可能受限于单线程模式,即使有更多CPU资源也难以利用。 - 线程池配置不当:线程池大小不合理,或者任务队列设计不佳,导致CPU资源未被有效利用。
建议措施: 1. 优化负载均衡策略:确保负载均衡器能够均匀分发请求至各节点,减少单点压力。 2. 增强数据库能力:考虑数据库读写分离、使用连接池优化、或根据实际情况采用分布式数据库方案。 3. 调整线程池配置:根据服务器硬件和应用需求合理设置线程池大小,避免过度线程化。 4. 监控与调优:持续监控系统各项指标,包括CPU、内存、磁盘I/O和网络,针对性地进行性能调优。 5. 异步处理与并行计算:在合适场景下采用异步处理机制,提高应用对高并发的处理能力。
以上分析基于提供的信息和通用知识,具体问题可能还需结合实际运行日志、监控数据进一步诊断。