Administrator
发布于 2023-04-13 / 11 阅读
0
0

随笔-3

qps压测

QPS(Query per second 每秒处理完的请求数),一般用于表现接口的性能高低。我们通常需要借助一些常用的性能测试工具,如 Apache ab, Apache JMeter (互联网公司用的较多),LoadRunner 等。这里介绍下轻量级性能测试工具 wrk。

wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。优点:轻量,安装使用简单,性能高。缺点:只支持单机,功能较JMeter等专业的测试工具少,专业级压测推荐使用JMeter或阿里云等压测服务。

使用,以CentOS为例

依次执行一下命令

sudo yum groupinstall 'Development Tools'
sudo yum install -y openssl-devel git 
git clone https://github.com/wg/wrk.git wrk
cd wrk
make
# 将可执行文件移动到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin

查看安装版本信息

测试使用

这条命令表示,利用 wrk 对 www.baidu.com 发起压力测试,线程数为 4,模拟 500 个并发请求,持续 10 秒。更多参数可以使用--help命令查看。

Hook钩子线程

程序即将退出的时候,也就是 JVM 程序即将退出的时候,Hook 线程就会被启动执行

Runtime.getRuntime().addShutdownHook(new Thread());

常用场景:防止程序重复执行、资源释放等。请不要在 Hook 线程中执行一些耗时的操作噢,这样会导致程序长时间不能退出。

springboot优点

  • 1、能够轻松、方便地创建一个 Spring 应用;

  • 2、直接使用内嵌的 Tomcat, Jetty, Undertow 容器(无需再手动安装容器,通过部署 WAR 包的方式);

  • 3、内部自动管理各种 Jar 包的版本依赖关系,再也不用为版本冲突而烦恼啦;

  • 4、自动化配置 Spring 相关功能,以及第三方库;

  • 5、提供诸如指标,健康检查, 外部化配置等功能;

  • 6、"零配置",再也不需要手写地狱般的 XML 配置了;

Spring WebFlux

在了解 Spring WebFlux 之前,我们先来对比说说什么是 Spring MVC,这更有益我们去理解 WebFlux。

Spring MVC 构建于 Servlet API 之上,使用的是同步阻塞式 I/O 模型,什么是同步阻塞式 I/O 模型呢?就是说,每一个请求对应一个线程去处理。

Spring WebFlux 是一个异步非阻塞式的 Web 框架,它能够充分利用多核 CPU 的硬件资源去处理大量的并发请求。

WebFlux 内部使用的是响应式编程(Reactive Programming),以 Reactor 库为基础, 基于异步和事件驱动,可以让我们在不扩充硬件资源的前提下,提升系统的吞吐量和伸缩性。不过WebFlux 并不能使接口的响应时间缩短,它仅仅能够提升吞吐量和伸缩性。它特别适合应用在 IO 密集型的服务中,比如微服务网关这样的应用中。WebFlux 默认情况下使用 Netty 作为服务器,并且它不支持mysql。

PS:IO 密集型包括:磁盘IO密集型, 网络IO密集型,微服务网关就属于网络 IO 密集型,使用异步非阻塞式编程模型,能够显著地提升网关对下游服务转发的吞吐量。

需要明确一点就是:WebFlux 不是 Spring MVC 的替代方案!在微服务架构中,Spring MVC 和 WebFlux 可以混合使用。我们需要在合适的场景中,选型最合适的技术

守护线程

当 JVM 中不存在任何一个正在运行的非守护线程时,则 JVM 进程即会退出。什么意思呢,守护线程相当于后台运行的线程,不会影响程序的运行生命周期,当非守护线程执行完毕,JVM 会随之退出运行,守护线程同时也会被回收。我们可以通过thread.setDaemon(true)将一个线程设置为守护线程。JVM 中的垃圾回收线程就是典型的守护线程。

通常来说,守护线程经常被用来执行一些后台任务,但是呢,你又希望在程序退出时,或者说 JVM 退出时,线程能够自动关闭,此时,守护线程是你的首选。


评论