首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试官:SpringBoot如何优雅停机?

1.合理杀死进程在 Linux 中 kill 杀死进程的常用命令有以下这些:kill -2 pid:向指定 pid 发送 SIGINT 中断信号,等同于 ctrl+c。...信号会被当前进程接收到,但它的子进程不会收到,如果当前进程被 kill 掉,它的的子进程的父进程将变成 init 进程 (init 进程是那个 pid 为 1 的进程)。...server.shutdown=graceful# 设置缓冲期,最大等待时间,默认:30秒spring.lifecycle.timeout-per-shutdown-phase=60s此时,应用在关闭时...,Web 服务器将不再接受新请求,并等待正在进行的请求完成的缓冲时间。...但是,不同的 Web 容器(Tomcat、Jetty、Undertow)有不同的自定义优雅停机的方法,以 Tomcat 为例,它的自定义优雅停机实现如下。

84210

一个故事讲清楚 NIO

可以看到银行职员的工作状态并不饱和,比如在第1步,其实是处于等待中。...这种工作其实就是BIO,每次来一个请求(顾客),就分配到线程池中由一个线程(职员)处理,如果超出了线程池的最大上限(10个),就扔到队列等待 。 二:NIO方式 如何提高银行的吞吐量呢?...假设顾客非常多,职员A的工作处于饱和中,他不断的将填好表的顾客带到柜台处理,柜台一个职员5分钟能处理完一个顾客,一个小时9名职员能处理:9*(60/5)=108。...下图是非常经典的NIO说明图,mainReactor线程负责监听server socket,accept新连接,并将建立的socket分派给subReactor;subReactor可以是一个线程,也可以是线程池...NIO+异步的方式能让少量的线程(资源)做大量的事情,这适用于很多应用场景,比如代理服务、api服务、长连接服务等等,这些应用如果用同步方式将耗费大量机器资源。

39220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一个故事讲清楚 NIO

    可以看到银行职员的工作状态并不饱和,比如在第1步,其实是处于等待中。...这种工作其实就是BIO,每次来一个请求(顾客),就分配到线程池中由一个线程(职员)处理,如果超出了线程池的最大上限(10个),就扔到队列等待 。 二:NIO方式 如何提高银行的吞吐量呢?...假设顾客非常多,职员A的工作处于饱和中,他不断的将填好表的顾客带到柜台处理,柜台一个职员5分钟能处理完一个顾客,一个小时9名职员能处理:9*(60/5)=108。...下图是非常经典的NIO说明图,mainReactor线程负责监听server socket,accept新连接,并将建立的socket分派给subReactor;subReactor可以是一个线程,也可以是线程池...NIO+异步的方式能让少量的线程(资源)做大量的事情,这适用于很多应用场景,比如代理服务、api服务、长连接服务等等,这些应用如果用同步方式将耗费大量机器资源。

    28330

    一个故事讲清楚NIO

    可以看到银行职员的工作状态并不饱和,比如在第1步,其实是处于等待中。   ...这种工作其实就是BIO,每次来一个请求(顾客),就分配到线程池中由一个线程(职员)处理,如果超出了线程池的最大上限(10个),就扔到队列等待 。 二:NIO方式 如何提高银行的吞吐量呢?...假设顾客非常多,职员A的工作处于饱和中,他不断的将填好表的顾客带到柜台处理,柜台一个职员5分钟能处理完一个顾客,一个小时9名职员能处理:9*(60/5)=108。   ...下图是非常经典的NIO说明图,mainReactor线程负责监听server socket,accept新连接,并将建立的socket分派给subReactor;subReactor可以是一个线程,也可以是线程池...NIO+异步的方式能让少量的线程(资源)做大量的事情,这适用于很多应用场景,比如代理服务、api服务、长连接服务等等,这些应用如果用同步方式将耗费大量机器资源。

    34310

    一个故事讲清楚NIO

    可以看到银行职员的工作状态并不饱和,比如在第1步,其实是处于等待中。...这种工作其实就是BIO,每次来一个请求(顾客),就分配到线程池中由一个线程(职员)处理,如果超出了线程池的最大上限(10个),就扔到队列等待 。 二:NIO方式 如何提高银行的吞吐量呢?...假设顾客非常多,职员A的工作处于饱和中,他不断的将填好表的顾客带到柜台处理,柜台一个职员5分钟能处理完一个顾客,一个小时9名职员能处理:9*(60/5)=108。...下图是非常经典的NIO说明图,mainReactor线程负责监听server socket,accept新连接,并将建立的socket分派给subReactor;subReactor可以是一个线程,也可以是线程池...NIO+异步的方式能让少量的线程(资源)做大量的事情,这适用于很多应用场景,比如代理服务、api服务、长连接服务等等,这些应用如果用同步方式将耗费大量机器资源。

    34240

    jstack 命令使用经验总结和线程性能诊断脚本

    在命令使用上十分简洁, 其信息量与复杂度主要体现在 thread dump 内容的分析上; # 最基本的使用 sudo -u xxx jstack {vmid} # 从 core dump 中提取 thread...; waiting on condition [0x...], 表示线程被阻塞原语所阻塞, 方括号内的地址表示线程等待的资源地址; 这种和 jvm 的内置锁体系没有关系, 它是 jdk5 之后的 java.util.concurrent...使用 jstack 还有一个重要的功能就是分析热点线程: 找出占用 cpu 资源最高的线程; 首先我先介绍一下手工敲命令分析的方法: * 使用 top 命令找出 cpu 使用率高的 thread id:...* # -p pid: 只显示指定进程的信息 # -H: 展示线程的详细信息 top -H -p {pid} # 使用 P 快捷键按 cpu 使用率排序, 并记录排序靠前的若干 pid (轻量级进程 id...: 按照 cpu 使用率从高到低排序, 打印指定 jvm 进程的前 n 个线程。

    2.3K30

    详解 Java 线上问题排查思路

    pid | grep nid -C10 命令查看与 nid 对应的线程的状态信息和该线程的堆栈信息(主要是自身程序代码的堆栈信息),也可以使用 jstack -l nid 命令查看更详细的线程堆栈信息...定位线程“锁等待”导致的 CPU 问题 可以使用 top 命令来定位问题进程的 pid ,但由于我们使用的纯粹的 docker 环境,也只运行了一个 java 进程,我们这里直接使用 jps 命令来定位进程...: root@436f6af3feeb:/# jps 8992 Jps 8925 Main 还是使用 top -Hp pid 的方式,查看线程占用情况,发现只有三个线程处于 RUNNABLE 状态,其余线程处于...可以发现有较多线程处于 WAITING 状态,只有较少数线程处于 RUNNABLE 状态。...RUNNABLE 状态的线程是在 Main.java 的 26 行开始执行,到这里基本可以确定是哪个类的哪个方法用到的锁没有及时释放导致过多线程处于“锁等待”状态,最终导致 CPU 过高问题。

    3.4K32

    JVM实战—13.OOM的生产案例

    但是检查了一下系统的监控,发现每秒请求并不是400,而是100。问题一:为何Tomcat的400个线程都处于工作状态明明每秒才100个请求,为什么Tomcat的400个线程都处于工作状态?...所以肯定会有一些DirectByteBuffer对象是处于存活状态的,那么这些存活状态下的对象就需要转入Survivor区域中。但这个系统当时在上线时,内存分配不合理。...6.类加载器过多引发OOM问题排查(服务假死自己恢复+ top判断 + OS杀进程)(1)案例背景(2)使用top命令检查机器资源使用(3)当内存使用这么高时会发生什么(4)到底是谁占用了过多的内存(1...因此针对服务假死这个问题:首先可以用top命令去检查一下机器的资源使用量,通过top命令查看机器上运行的各进程对CPU和内存两种资源的使用量。一.接口假死的两者情况为什么要先用top看机器资源?...二.根据JVM进程对CPU消耗和内存的消耗判断是否发生频繁GC针对线上这台机器使用top命令检查之后,就发现了一个问题:这个服务的进程对CPU耗费很少,仅仅耗费了1%的CPU资源。

    9500

    Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览

    在关闭时,web服务器将不再允许新的请求,并将等待完成的请求给个宽限期让它完成。...当然喽5.6.x也支持,只是标记为@Deprecated不推荐使用了 如果你使用Jetty嵌入式容器,版本要求是Jetty 9.4.22+ --- 核心依赖升级 Spring Boot 2.3迁移到几个...--- 嵌入式Servlet Web Server线程配置 用于配置嵌入式Servlet web服务器使用的线程的配置属性(包括Jetty, Tomcat, 和Undertow)别移动到了专注于threads...的组:erver.jetty.threads,server.tomcat.threads,server.undertow.threads。...--- 活性探测器 Spring Boot现在内置了关于应用程序可用性的探测的能力,可以跟踪应用程序是否处于活动状态以及是否准备好处理流量。

    1.6K62

    架构必知:Linux性能优化全景指南(建议收藏)

    它和我们传统意义上理解的CPU使用率并没有直接关系。 其中不可中断进程是正处于内核态关键流程中的进程(如常见的等待设备的I/O响应)。不可中断状态实际上是系统对进程和硬件设备的一种保护机制。...此时用top和pidstat发现系统CPU使用率过高,但是并没有发现CPU使用率高的进程。 出现这种情况一般时我们分析时遗漏的什么信息,重新运行top命令并观察一会。...;4)每个进程CPU使用率也不高,但有两个进程处于D状态,可能在等待IO。...之前top查看的处于D状态的进程号,用pidstat -d -p XXX 展示进程的I/O统计数据。发现处于D状态的进程都没有任何读写操作。...top输出 从CPU使用率不高,但是处于Running状态的进程入手 perf record/report发现短时进程导致 (execsnoop工具) 不可中断和僵尸进程案例 先用top观察iowait

    1.8K30

    通过这个故事理解啥是 NIO

    可以看到银行职员的工作状态并不饱和,比如在第1步,其实是处于等待中。...这种工作其实就是BIO,每次来一个请求(顾客),就分配到线程池中由一个线程(职员)处理,如果超出了线程池的最大上限(10个),就扔到队列等待 。 2 NIO方式 如何提高银行的吞吐量呢?...假设顾客非常多,职员A的工作处于饱和中,他不断的将填好表的顾客带到柜台处理,柜台一个职员5分钟能处理完一个顾客,一个小时9名职员能处理:9*(60/5)=108。...下图是非常经典的NIO说明图,mainReactor线程负责监听server socket,accept新连接,并将建立的socket分派给subReactor;subReactor可以是一个线程,也可以是线程池...13 张图解 Java 中的内存模型 Upwork 发布最赚钱的编程语言 Top 15 一次微服务与IoT的深度探秘与实战 2020年最漂亮的Linux发行版 离职后与大家在星球聊了很多,你不来看看?

    16310

    Jetty基本介绍 及 与tomcat对比

    第一种方式是通过命令行激活: java -jar start.jar --add-to-startd=logging 上面的命令会在Jetty目录下创建logging.ini文件,相关的配置可以在此文件中查到...接下去就是将这个线程交给队列线程池去执行了。...,其实从 Jetty 的源码中能够发现,真正共享一个线程的处理只是在监听不同连接的数据传送事件上,比如有多个连接已经建立,传统方式是当没有数据传输时,线程是阻塞的也就是一直在等待下一个数据的到来,而 NIO...的处理方式是只有一个线程在等待所有连接的数据的到来,而当某个连接数据到来时 Jetty 会把它分配给这个连接对应的处理线程去处理,所以不同连接的处理线程仍然是独立的。...相比之下,Tomcat 要臃肿很多,Tomcat 的整体设计上很复杂,前面说了 Tomcat 的核心是它的容器的设计,从 Server 到 Service 再到 engine 等 container 容器

    1K40

    Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览

    在关闭时,web服务器将不再允许新的请求,并将等待完成的请求给个宽限期让它完成。...当然喽5.6.x也支持,只是标记为@Deprecated不推荐使用了 如果你使用Jetty嵌入式容器,版本要求是Jetty 9.4.22+ ---- 核心依赖升级 Spring Boot 2.3迁移到几个...---- 嵌入式Servlet Web Server线程配置 用于配置嵌入式Servlet web服务器使用的线程的配置属性(包括Jetty, Tomcat, 和Undertow)别移动到了专注于threads...的组:erver.jetty.threads,server.tomcat.threads,server.undertow.threads。...---- 活性探测器 Spring Boot现在内置了关于应用程序可用性的探测的能力,可以跟踪应用程序是否处于活动状态以及是否准备好处理流量。

    1.5K20

    涨姿势 | 服务重启后,为什么发生抖动?

    在发布或重启某线上某服务时(jetty8作为服务器),常常发现有些机器的load会飙到非常高(高达70),并持续较长一段时间(5分钟)后回落(图1),与此同时响应时间曲线(图2)也与load曲线一致。...1)通过top -H -p 查找cpu使用率较高的线程,发现2129和2130这两个线程cpu使用较高。 ?...cpu使用率那么高,它在干什么呢?...而当流量持续不断导入时,我们代码的很多方法执行次数不断增多,此时C2 CompilerThread线程不断收集优化信息,并且开始将一些热点代码优化编译成本地机器码,因此该线程的cpu使用率增高。...模式的折中,一开始会启用Client模式,可以在启动后更快的让部分代码先进入编译优化阶段,之后会启动Server模式,达到程序效率最大优化的目的。

    1.6K30

    线上问题排查思路、工具小结

    注:CPU使用率是衡量系统繁忙程度的重要指标。但是CPU使用率的安全阈值是相对的,取决于你的系统的IO密集型还是计算密集型。一般计算密集型应用CPU使用率偏高load偏低,IO密集型相反。...java \-jar cpu-reaper.jar & 第一步:定位出问题的线程 方法 A: 传统的方法 top 定位CPU 最高的进程 执行top命令,查看所有进程占系统CPU的排序,定位是哪个进程搞的鬼...show-busy-java-threads # 从所有运行的Java进程中找出最消耗CPU的线程(缺省5个),打印出其线程栈 # 缺省会自动从所有的Java进程中找出最消耗CPU的线程,这样用更方便...当任务队列满了并且已开辟了最大线程数,此时又来了新任务,ThreadPoolExecutor 会拒绝服务。...D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程 %CPU 上次更新到现在的CPU时间占用百分比 %MEM 进程使用的物理内存百分比 TIME+ 进程使用的CPU时间总计,单位1

    3.3K41

    jvm 性能调优、监控工具 -- jps、jstack、jmap、jhat、jstat、hprof

    下面我们就来介绍一下如何找到某个 java 进程中最耗 CPU 的 java 线程。 找出进程 ID — ps 首先我们通过 ps 命令找到运行在 jetty 容器中的 java 进程 pid。...找到占用 CPU 时间最长的线程 — top -Hp pid 接下来,我们通过 top 命令找到进程中占用 CPU 时间最长的线程 ID。 我们找到了线程 ID — 31078。...我们看到这个线程处于 waiting on condition 的状态,表明他在等待某个事件触发。...at java.lang.Thread.run(Thread.java:745) 可以看到,线程处于 TIMED_WAITING 状态,表明该线程池中的线程正处于休眠,等待唤醒,且设置了超时。...t1 在等待锁,线程 t2 也在等待锁,双方又各自占用着对方等待的锁,从而可以轻易判断出死锁的存在。

    1.6K20

    Jetty 与 Tomcat

    3 监控系统会每隔一段时间,ping下我们系统,我们系统会pong回监控系统,并带上ip地 址,jvm当前使用率,cpu使用率等信息,如果超过一定数值,监控系统就会发出预警信 息,我们就需要去生产管理通过日志和命令查看...总结: 从Tomcat和Jetty中 学习到的 组件化设计规范 当我们学习一门技术的时候,如果可以勤于思考、善于总结,可以帮助我们看到现象背 后更本质的东西,让我们在成长之路上更快“脱颖而出 组件化及可配置...队列中,执行对象的 finalize 方法,之后才会回收这些对象。...在解释这个参数之前,先简单回顾下 TCP 连接的建立过程:客户端向服务端发送 SYN 包,服务端回复 SYN+ACK,同时将这个处于 SYN_RECV 状态的连接保存到半连接队列。...客户端返回 ACK 包完成三次握手,服务端将 ESTABLISHED 状态的连接移入accept 队列,等待应用程序(Tomcat)调用 accept 方法将连接取走。

    1.3K21

    架构师技能4-深入分析java进程CPU飙高和长耗时

    2、查看具线程的cpu使用率:top -H -pid 如果几个线程一直占用cpu接近100%,说明这个线程可能循环执行业务或者持续做fgc。...的等待有时间限制; Blocked: 如果进入同步方法或同步代码块,没有获取到锁,则会进入该状态; Dead: 线程执行完毕,或者抛出了未捕获的异常之后,会进入dead状态,表示该线程结束...其表现特征为,由于多个线程对临界区,或者锁的竞争,可能出现: * 频繁的线程的上下文切换:从操作系统对线程的调度来看,当 线程在等待资源而阻塞的时候,操作系统会将之切换出来,放到等待的队列,当线程获得资源之后...shift+h查找出哪个线程消耗的cpu高 先输入top -p 21125,然后再按shift+h。...但这里指定了时间,到达指定的时间后自动退出等待状态;parking指线程处于挂起中。

    1.6K30

    Linux 性能优化的全景指南,可能都在这里了,建议收藏~

    I/O 密集型进程,等待 I/O 也会导致平均负载升高,此时 CPU 使用率并不一定高 大量等待 CPU 的进程调度会导致平均负载升高,此时 CPU 使用率也会比较高 平均负载高时可能是 CPU 密集型进程导致...此时用top和pidstat发现系统CPU使用率过高,但是并没有发现CPU使用率高的进程。 出现这种情况一般时我们分析时遗漏的什么信息,重新运行top命令并观察一会。...;4)每个进程CPU使用率也不高,但有两个进程处于D状态,可能在等待IO。...所以遇到这种情况,首先要检查进程状态是否正常。ps 命令查找该进程已经处于Z状态,即僵尸进程。...top输出 从CPU使用率不高,但是处于Running状态的进程入手 perf record/report发现短时进程导致 (execsnoop工具) 不可中断和僵尸进程案例 先用top观察iowait

    2.6K21

    Linux性能优化实战 笔记

    平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。...可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。...不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep...所以,在理解平均负载时,也要注意:平均负载高有可能是 CPU 密集型进程导致的;平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;当发现负载高的时候,你可以使用 mpstat、pidstat...等待 I/O 的进程一般是不可中断状态,所以用 ps 命令找到的 D 状态(即不可中断状态)的进程,多为可疑进程。

    1.8K22
    领券