热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

美团面试官:Java性能调优你会多少?一个问题就把我问的哑口无言,哭了

一、前言什么是性能调优?性能调优其实很好理解,就是优化硬件、操作系统、应用之间的一个充分的协作,最大化的发挥出硬件的极致性能,来应对高负载的业务需求。为什么需要性能优化?其实说到底

一、前言

什么是性能调优?

性能调优其实很好理解,就是优化硬件、操作系统、应用之间的一个充分的协作,最大化的发挥出硬件的极致性能,来应对高负载的业务需求。

为什么需要性能优化?

其实说到底就是两个原因:

①:为了获得更好的系统性能

②:通过性能调优来满足不断增加的业务需求

性能调优其实作用于我们项目中的很多阶段,项目上线前性能的基本优化,项目上线后也是需要持续不断的性能优化来应对不同时期的业务需求。

我有个朋友现在在阿里是 P7,他认为在 P7 这个职位,特别是像阿里这种体量的企业,以下这些性能调优的技术是必须要掌握的,之后给我分享了他自己这么多年精心整理的性能调优笔记。


经允许,现在也是可以分享这份笔记的完整版给大家了,需要的朋友可以帮 LZ 进行转发+关注,戳我可以免费领取!


img


二、六大性能调优技术(JVM 调优+网络调优+数据库调优+LINUX 内核调优+中间件底层探索+容器环境调优)

手绘板(脑图)

img

1、JVM 调优



  • JVM 调优必备理论知识-Gc COLLECTOR-三色标记

  • 垃圾回收算法串讲

  • JVM 常见参数总结

  • JVM 调优实战

  • JVM(HotSpot)核心源码解读

  • JVM 核心模块(GC 算法)手写实战

img

2、网络调优



  • TCP 内核参数

  • JAVA API 参数

  • IO 模型 TRADE OFF

  • 资源隔离优化

  • 网卡、CPU 配置调优

  • 网络安全的加密算法与数字签名

img

3、数据库调优



  • Mysql 性能监控

  • SCHEMA 与数据类型优化

  • 通过执行计划优化

  • 通过索引进行优化

  • 查询优化

  • 参数优化

  • 分布式 Mysql 优化

  • SQL 注入、WebShell 攻击的危险和规避方法

img

4、LINUX 内核调优



  • 单进程最大打开文件数限制

  • 内核内存参数调优

  • TCP 发送 KEEPALIVE 消息频度

  • TCP FIN_WAIT_2 状态时间

  • 定义 UDP 和 TCP 链接的本地端口取值范围

  • 优化 TCP 接收缓存的最大值、最小值、默认值

  • 优化内核套接字接收缓存区默认大小

  • 优化内核 TCP 的 SYN 攻击

  • 内存溢出、内存泄漏的原因与解决

  • 如何高效利用 CPU 缓存

  • 内存问题分析与性能优化

  • 磁盘 I/O 性能优化

img

5、中间件底层探索



  • Redis6.X 核心源码解读

  • Redis6.X 内核编码解读

  • String/Hash/List/Set/ZSet 数据结构解读

  • Kernel 与 Epoll 多路复用机制底层解读

  • LRU 算法解读

  • RocketMQ 源码解读

img

6、容器环境调优



  • 镜像体积调优

  • 镜像体积最小化

  • 构建速度最快化

  • 使用 CMD VOLUME 指令对 IMAGE 进行服务化

  • DOCKER 网络方案优化

img


三、关于性能调优你必须知道的几个点

1、性能指标

我们进行性能优化肯定是为了获得更好的性能,那我们怎么去衡量呢?性能指标又是什么呢?一般衡量一个项目(这里指的是网站)的指标有三个:


吞度量:是单位时间内完成的用户或系统的请求数量。

并发数:同时可以去接收多少用户的访问请求。

响应时间:用户发出请求到收到响应的时间间隔。


img

2、怎么去进行性能分析?

如果我们通过测试发现网站的性能没有达到我们的预期,我们可以通过什么工具去查找到性能瓶颈呢?

① 硬件



  • 用 vmstat、sar、iostat 检测是否是 CPU 瓶颈

  • 用 free、vmstat 检测是否是内存瓶颈

  • 用 iostat 检测是否是磁盘 I/O 瓶颈

  • 用 netstat 检测是否是网络带宽瓶

② 操作系统



  • 进程

  • 文件系统

  • SWAP 分区

内核参数调整

③ 应用程序(Mysql 等)



  • mysqlreport 性能分析报告

  • mysqlsla 慢查询日志分析

3、根据三大法则进行性能优化

查找出问题之后我们可以通过三大法则去进行调优,首先确定调优目标,其次具体化调优步骤,最后检测调优结果。

img

4、性能调优就是运维工程师的事?

其实在我看来性能优化是一个团队的事情,为什么这么说,比如我们需要在网上做一个商城,大体的流程应该是这样的:



  • 运营提出需求

  • 产品整理需求

  • 开发开发具体的业务应用

  • 运维搭建开发环境

  • QA 进行项目测试

  • 运维进行项目上线

  • 监控进行项目监控

这么多部门的参与,可能出现在产品,也可能出现在程序上,也可能是运维的环境搭建的有问题。只是参加性能调优的更多的是开发、运维、测试和监控。

img


四、总结

其实性能调优没有大家想象的那么难,掌握好正确的思路去实施是完全可以做到的,不管是做程序员这一行业,还是其他任何行业,做一件事情之前,首先都是要去缕清思路、做好计划、进行检查,然后再去实施。

需要的朋友可以帮 LZ 进行转发+关注,戳这里免费领取性能调优PDF手册~



推荐阅读
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 近期,微信公众平台上的HTML5游戏引起了广泛讨论,预示着HTML5游戏将迎来新的发展机遇。磊友科技的赵霏,作为一名HTML5技术的倡导者,分享了他在微信平台上开发HTML5游戏的经验和见解。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本文详细探讨了在ASP.NET环境中通过加密数据库连接字符串来提升数据安全性的方法。加密技术不仅能够有效防止敏感信息泄露,还能增强应用程序的整体安全性。文中介绍了多种加密手段及其实施步骤,帮助开发者在日常开发过程中更好地保护数据库连接信息,确保数据传输的安全可靠。 ... [详细]
author-avatar
13578945682a_699
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有