美文网首页
从应用层到操作系统层的几种调优策略

从应用层到操作系统层的几种调优策略

作者: 柳岸花开 | 来源:发表于2021-03-19 22:19 被阅读0次

性能测试结果需要包含测试接口的平均、最大和最小吞吐量,响应时间,服务器的 CPU、内存、I/O、网络 IO 使用率,JVM 的 GC 频率等。

通过观察这些调优标准,可以发现性能瓶颈,我们再通过自下而上的方式分析查找问题。

首先从操作系统层面,查看系统的 CPU、内存、I/O、网络的使用率是否存在异常,再通过命令查找异常日志,最后通过分析日志,找到导致瓶颈的原因;

还可以从 Java 应用的 JVM层面,查看 JVM 的垃圾回收频率以及内存分配情况是否存在异常,分析日志,找到导致瓶颈的原因。

如果系统和 JVM 层面都没有出现异常情况,我们可以查看应用服务业务层是否存在性能瓶颈,例如 Java 编程的问题、读写数据瓶颈等等。

从应用层到操作系统层的几种调优策略

  1. 优化代码
    应用层的问题代码往往会因为耗尽系统资源而暴露出来。例如,我们某段代码导致内存溢出,往往是将 JVM 中的内存用完了,这个时候系统的内存资源消耗殆尽了,同时也会引发JVM 频繁地发生垃圾回收,导致 CPU 100% 以上居高不下,这个时候又消耗了系统的CPU 资源。

还有一些是非问题代码导致的性能问题,这种往往是比较难发现的,需要依靠我们的经验来优化。例如,我们经常使用的 LinkedList 集合,如果使用 for 循环遍历该容器,将大大降低读的效率,但这种效率的降低很难导致系统性能参数异常。

这时有经验的同学,就会改用 Iterator (迭代器)迭代循环该集合,LinkedList
是链表实现的,如果使用 for 循环获取元素,在每次循环获取元素时,都会去遍历一次List,这样会降低读的效率。

  1. 优化设计
    面向对象有很多设计模式,可以帮助我们优化业务层以及中间件层的代码设计。优化后,不仅可以精简代码,还能提高整体性能。例如,单例模式在频繁调用创建对象的场景中,可以共享一个创建对象,这样可以减少频繁地创建和销毁对象所带来的性能消耗。

  2. 优化算法
    好的算法可以帮助我们大大地提升系统性能。

  3. 时间换空间
    有时候系统对查询时的速度并没有很高的要求,反而对存储空间要求苛刻,这个时候我们可以考虑用时间来换取空间。

  4. 空间换时间
    这种方法是使用存储空间来提升访问速度。现在很多系统都是使用的 MySQL 数据库,较为常见的分表分库是典型的使用空间换时间的案例。

因为 MySQL 单表在存储千万数据以上时,读写性能会明显下降,这个时候我们需要将表数据通过某个字段 Hash 值或者其他方式分拆,系统查询数据时,会根据条件的 Hash 值判断找到对应的表,因为表数据量减小了,查询性能也就提升了。

  1. 参数调优
    根据自己的业务场景,合理地设置 JVM 的内存空间以及垃圾回收算法可以提升系统性能。

例如,如果我们业务中会创建大量的大对象,我们可以通过设置,将这些大对象直接放进老年代。这样可以减少年轻代频繁发生小的垃圾回收(Minor GC),减少 CPU 占用时间,提升系统性能。

Web 容器线程池的设置以及 Linux 操作系统的内核参数设置不合理也有可能导致系统性能瓶颈,根据自己的业务场景优化这两部分,可以提升系统性能。

兜底策略,确保系统稳定性
产品的用户量是瞬息万变的,无论我们的系统优化得有多好,还是会存在承受极限,所以为了保证系统的稳定性,我们还需要采用一些兜底策略。

第一,限流,对系统的入口设置最大访问限制。这里可以参考性能测试中探底接口的 TPS。同时采取熔断措施,友好地返回没有成功的请求。

第二,实现智能化横向扩容。智能化横向扩容可以保证当访问量超过某一个阈值时,系统可以根据需求自动横向新增服务。

第三,提前扩容。这种方法通常应用于高并发系统,例如,瞬时抢购业务系统。这是因为横向扩容无法满足大量发生在瞬间的请求,即使成功了,抢购也结束了。

目前很多公司使用 Docker 容器来部署应用服务。这是因为 Docker 容器是使用
Kubernetes 作为容器管理系统,而 Kubernetes 可以实现智能化横向扩容和提前扩容Docker 服务。

相关文章

  • 从应用层到操作系统层的几种调优策略

    性能测试结果需要包含测试接口的平均、最大和最小吞吐量,响应时间,服务器的 CPU、内存、I/O、网络 IO 使用率...

  • JVM调优

    1 调优层次 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。架构调优和代...

  • SATA协议简介

    SATA协议四层:应用层、传输层、链路层、物理层、 应用层:发送、执行Command命令,NCQ协议可以优...

  • 42.集群调优策略—Index 写调优-1

    42.1 分布式集群调优策略 主要从index写调优和Search读两个方面进行调优 Index 写调优副本数设置...

  • 分享JVM调优的几种策略——只要思想不滑坡,办法总比困难多

    JVM调优的几种策略 一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(...

  • Android Socket 的使用方法

    引言 Socket是位于应用层和传输层之间的一个抽象层,把TCP/IP层复杂的操作抽象为几个简单的接口,供应用层调...

  • Android界面绘制

    任何一个操作系统实现界面绘制,都需要处理应用层、系统层和硬件层的分工协作: 应用层负责定义画面的内容 系统层负责综...

  • 1. 套接字Socket

    套接字(Socket)是一个抽象层,位于应用层和传输层之间,将TCP/IP复杂的操作抽象出几个简单接口,供应用层调...

  • 实验室管理系统(LIMS)涵盖的三层结构及应用

    从结构上看,实验室管理系统(LIMS)包括三个主要的层: 1)应用层:亦称为技术层,用于LIMS系统与操作系统、网...

  • 第四章 如何进行参数选择

    本章主要会介绍策略开发过程中的参数调优问题。正如策略开发之前需要先明确交易逻辑和利润来源一样。在进行策略调优...

网友评论

      本文标题:从应用层到操作系统层的几种调优策略

      本文链接:https://www.haomeiwen.com/subject/tyobcltx.html