关于 tomcat 线程池调优的问题

本贴最后更新于 2093 天前,其中的信息可能已经时过境迁

一个小直播平台,随着用户增加,性能出现了问题,开始是消息延迟,接的是腾讯的 im,做过测试,10000 条消息可能会有 20 条会有 100 多秒的延迟才有响应,我们所有的消息是放在 spring 的异步线程池做处理,当时 spring 线程池的数量设置的最大数量是 200,队列是 1 万,策略是队列不足主线程跑,但是消息延迟更明显了,看日志发现 spring 的线程池一直开的很高,随后就把最大数量改到了 2000 队列改到 2000(这么做是不想让消息在队列里停留太久)就这样好过一阵子,然后每次感觉很卡的时候就不停的加负载(主服务 23 台负载在 4 台服务器上),对了忘记说了。架构就是 zk 加 dubbo,其实 dubbo 也没拆分很大,主要对后台管理系统提供服务。所以全部压力都在这 23 台负载上,我们运维给 tomcat 线程池设置到了 1000,后来改到了 2000,但是我发现接口响应变的更久了,切了份 nginx 日志,在高峰期,平均接口响应都在 20 秒之上,我的天那,(我一度怀疑是代码或者 db 的问题,我们的 redis mysql 都是买的阿里的)平时都是 0.00 几响应, 然后我看了负载 tomcat 的日志,惊奇的发现,高峰期 随便一个线程执行 距下次执行都是 20 秒以上,看了很多资料,觉得是线程设置太高,线程切换时间用的久。但是我们的 cpu 高峰也就只跑了 40% 而且日志里线程最高就只跑到 1400,大佬们,有谁能给我指跳路,
目前我觉得是线程设置太高了,导致引起的一系列问题。。
太难的做不了,然后人手也不够,就两个后台 java,一个运维还什么也不懂。。为难我这个没做过并发的一年小开发了。。。。

  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 3 关注
  • 并发
    75 引用 • 73 回帖 • 1 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9571 引用 • 43560 回帖 • 97 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • jackfruitran
    作者

    我们服务器单台是 8 核 16G 的,我觉得他们设置线程都是 2 倍核心数什么的,没有过这方面经验,也不知道具体设置多少是少,求经验大佬给点经验,今天尝试了把一台负载 tomcat 最大线程数改到 500 试一试 明天看下日志的效果,但是我还怕 cpu 切换线程是对系统的,一台机子 5 6 台负载 只改了一台又不会有效果

  • 88250

    CPU 一直是爆表的么?如果不是的话考虑下是不是 IO 造成的延迟,比如对外的网络连接。

    1 回复
  • jackfruitran
    作者

    cpu 最开始只有 10% 现在高峰期就 40% 对外的网络连接有,但是大部分都在异步连接池里,有延迟的比例也很少。。大 d 之前有用 tomcat 吗,线程池参数是怎么设置的。。。

    1 回复
  • 88250

    最好是查一下官方文档再调。我总感觉你这不是线程池的问题。 加点耗时日志看看,另外可以用 jstack、jmap 等工具看看 JVM 状态。

    2 回复
  • jackfruitran
    作者

    😭 现在的能力啃不动官方文档。。。只能到处找帖子看别人经验,,,现在是所有的接口在高峰期 响应都很慢,,我看日志,通过日志的线程号,一条条追的,同一个线程号,第二次在执行就是 30 秒 40 之后了,正常最多一秒就该跑第二条了,如果是代码里有问题的,不应该每一个线程都要这么久啊,,肯定会有很快执行完的啊。。而且低峰的时候我们代码正常响应速度在 0.00 几秒(nginx 看的)这些也都是我看日志猜的。。我真的是没什么经验,,很忧伤

  • jackfruitran
    作者

    耗时日志的话 就是 nginx 响应时间看到了,接口高峰请求 10S-30S 不等,低峰 0.00 几秒就完事了,,jvm 堆内存快照的话 不敢在生产环境直接用 ,每个知识点 都要先看很久资料 再开始用,真的是太菜了,而且身边也没大佬带,

    1 回复
  • 88250

    加诊断日志比较稳妥高效,先排除第三方调用影响,这个最不可控。把有可能耗时的点都列出来,逐一排除。

请输入回帖内容 ...

推荐标签 标签

  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 408 回帖 • 489 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 636 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 85 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 19 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 11 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 388 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 3 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 102 关注
  • OnlyOffice
    4 引用 • 21 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 158 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 177 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 625 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 12 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    170 引用 • 1529 回帖
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖 • 1 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 9 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    367 引用 • 1842 回帖
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 2 关注
  • danl
    165 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 724 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖