一个java小白的性能压测、性能优化思路

本文提供了一套全面的性能调优策略,涵盖代码、SQL、缓存、日志优化,服务器资源监控,网络优化,Tomcat参数调整,以及性能瓶颈定位技巧。通过具体实践指导,帮助提升系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

性能指标 常见的有响应时间,并发,tps等

1. 代码优化,主要是业务上的优化;    

sql优化,梳理业务,查找是否有多余业务、慢查询、简化sql查询等,避免全表扫描,正确使用索引; 
缓存优化:正确的使用缓存,常用的数据类似配置项参数可放到缓存中便于获取; 
日志优化:正确使用日志级别打印日志,压测过程中最好调整日志级别为ERROR运行。

慢查询日志(slow query log)记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句
SQL调优 定位慢的 select 默认是关闭的。需要通过以下设置进行开启:
#开启慢查询日志
mysql>slow_query_log=ON
#慢查询的阈值
mysql>long_query_time=3
#日志记录文件如果没有给出file_name值,默认为主机名,后缀为-slow.log。如果给出了文件名,文件则写入数据目录。
mysql>low_query_log_file=file_name
#慢sql查询
mysql>show variables like 'slow_query_log%'; 

explain sql  查看SQL语句的执行计划 分析sql 

2. 通过服务器资源如mysql配置,cpu、内存、磁盘、的使用情况等排查性能瓶颈点,一般都在高性能的机器上做压测;

如:linux top命令;查看cpu信息:cat /proc/cpuinfo;

安装插件:EasyNmon 服务器性能监控工具。

部分Mysql配置可参考:

其中事务安全配置影响性能较大:

sync_binlog=1  innodb_flush_log_at_trx_commit=1 时,安全性最高,写入性能最差

sync_binlog=N (N>1 ) innodb_flush_log_at_trx_commit=2 时,MySQL的写操作才能达到最高性能。 

innodb_flush_log_at_trx_commit:提交事务的时候将 redo 日志写入磁盘文件里去的策略。
0 : 提交事务的时候,不立即把 redo log buffer 里的数据刷入磁盘文件的,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。此时可能你提交事务了,结果 mysql 宕机了,然后此时内存里的数据全部丢失。
1 : 提交事务的时候,就必须把 redo log 从内存刷入到磁盘文件里去,只要事务提交成功,那么 redo log 就必然在磁盘里了。注意,因为操作系统的“延迟写”特性,此时的刷入只是写到了操作系统的缓冲区中,因此执行同步操作才能保证一定持久化到了硬盘中。
2 : 提交事务的时候,把 redo 日志写入磁盘文件对应的 os cache 缓存里去,而不是直接进入磁盘文件,可能 1 秒后才会把 os cache 里的数据写入到磁盘文件里去。

sync_binlog:控制二进制日志写入磁盘的过程。值为0 、1、N:
0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。
1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。
N:每写N次操作系统缓冲就执行一次刷新操作。

更多参考:https://blog.csdn.net/thundermeng/article/details/50448614

3. 保证多服务和压测机服务网络都在同一网段且网络情况较好,可推送文件测试速率;

scp -r myfile remote_username@remote_ip:remote_folder

如:scp -r software.tar.gz root@11.12.108.165:/home

4. Tomcat运行参数调优,可以从内存、并发、缓存、IO等方面按需配置参数。

如并发优化,在tomcat的server.xml文件的Connector中调整如下参数:

acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码

如:acceptCount="1000" connectionTimeout="60000" maxKeepAliveRequests ="2000" keepAliveTimeout="60000" minSpareThreads="100" maxSpareThreads="500"

5. 实际排查耗时点,尤其是多服务调用的情况下,可不并发单线程多次调用,在每个服务的出入口或某个功能操作的上下打印上时间戳,一般以毫秒计算即可。

long caTime = System.currentTimeMillis();
//某方法 某执行程序
logger.error("======================  sql time  " + (System.currentTimeMillis() - caTime) + "ms");

6. 熟悉jmter使用和脚本编写(开发什么都得会系列!);

7. 压测过程中:1)编写压测脚本将配置项或资源加载放到单独的初始化构造或请求中,避免第一次请求过慢;2)避免服务在压测过程中出现问题,可备份数据或服务等;3)压测一次结束后查询记录数等确认是否有丢数据情况;4)大数据压测后再次压测需清理数据库数据和服务日志文件等。

mysqldump 备份数据库

mysqldump --set-gtid-purged=off -uroot -p123456 -h11.12.107.194 -P3306 km107193 > /home/db.sql;
#备份数据库
mysql -uroot -p123456 -h11.12.107.193 -P3306 km107193 < /home/db.sql;
#恢复数据库
mysql > use db_name 
mysql > source /filepath/db_name.sql
#恢复数据库2

 

其他后续再补充!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值