1.使用SuperPi和Sysbench测试CPU性能
2.简单而强大的源码基准测试开源工具sysbench详解
3.高并发的MySQL数据查询时,会不会选择数据库连接池?
使用SuperPi和Sysbench测试CPU性能
准备测试机器,选用CentOS 7.9和Ubuntu .版本。分析
对机器进行镜像源配置及安装基础软件。源码CentOS中配置国内公共镜像源,分析安装基础依赖包。源码Ubuntu同样配置镜像源,分析汇多赚系统源码同样安装基础依赖。源码
选择常用的分析CPU性能测试工具SuperPI和Sysbench。
使用SuperPI进行单线程性能对比测试。源码SuperPI用于计算圆周率,分析耗时越短代表CPU性能越佳。源码
安装并运行SuperPI,分析计算位圆周率,源码java并发集合源码耗时.秒,分析通过比较时间来评估不同CPU的源码单线程性能。
Sysbench是一个多线程性能测试工具,适用于CPU、内存、磁盘I/O、线程和数据库性能测试。
安装Sysbench,对于CentOS,需要添加epel源。安装后,可以源码编译方式安装。免费的源码大全
详细参数解读,可参考官方文档。
进行CPU性能测试,确保素数上限和线程数一致。通过比较测试结果,评估CPU性能。
测试完成后,参考官方文档进行结果分析和优化。
简单而强大的基准测试开源工具sysbench详解
sysbench是一款强大的开源基准测试工具,它以其模块化和跨平台特性而备受青睐,用于评估系统性能,特别是adb push源码分析针对CPU、内存、文件I/O和数据库操作。其核心是基于LuaJIT的多线程设计,适用于数据库测试,支持诸如oltp_*.lua的预设测试和Lua扩展,为自定义性能测试提供了灵活性。 sysbench的基础是轻量级脚本语言Lua,它具有动态类型和自动内存管理等特性,而LuaJIT作为其高性能即时编译器,显著降低了动态语言的开销,提升了性能。sysbench通过编译安装简单便捷,arcgis创建要素源码支持Linux(x_、i和aarch)和Windows(WSL)环境。在RHEL/CentOS上,用户可以选择在线安装或源码编译,确保了与其他依赖包的兼容性,如mysql-devel、openssl-devel和postgresql-devel。 安装sysbench时,用户可以根据需求配置MySQL或PostgreSQL支持。如果不支持MySQL,编译时可选择不包含。sysbench命令行提供了丰富的选项,如`--threads`、`--events`和`--time`等,用于细致调整测试参数。其结果以秒为单位实时报告,包括速率、延迟统计,并允许自定义Lua脚本以满足特定场景的需求。 sysbench的测试功能全面,包括CPU性能测试、内存测试(如设置块大小和总大小)、文件系统I/O操作(如`fileio`测试,使用`--threads`、`--time`等参数),以及数据库性能测试,如数据库连接、调试和SSL设置。例如,内存测试通过`--memory-block-size`和`--memory-total-size`设置,而CPU测试默认使用素数序列,上限可达。 以下是一个简化版的sysbench内存测试示例,使用个并发线程,对GB文件进行随机读写,每5秒报告一次结果: 内存测试示例:sysbench memory --threads= --time= --file-test-mode=rnd --memory-block-size=8K --memory-total-size=G run
...
latency (ms,%): 0.
...
内存吞吐量:读取, MiB/s: ., 写入, MiB/s: .
总时间: 秒, 事件: 1,,, 平均延迟: 0.ms, %延迟: 0.ms
在数据库测试方面,sysbench提供了预设的oltp测试脚本,如`oltp_delete.lua`,以及通用的oltp_common.lua共享代码。用户可以轻松创建数据库连接,执行预设或自定义脚本,获取详细的统计信息。 在进行数据库操作时,sysbench通过`fileio`测试磁盘性能,如fsync()同步操作,以评估写入速度和文件同步性能。例如,创建2个5GiB文件,每5秒展示写入速率、fsync速率和%延迟。 sysbench的使用方法包括创建、准备、运行和清理测试,同时提供了详细的帮助选项,如`--help`,以便用户了解所有可用的参数和命令。 总结,sysbench是一个强大而灵活的工具,通过其模块化设计,让用户能够深入挖掘系统性能的各个方面,无论是单个组件还是整个系统,都能提供精确的基准测试结果。高并发的MySQL数据查询时,会不会选择数据库连接池?
现象Sysbench对MySQL进行压测, 并发数过大(>5k)时, Sysbench建立连接的步骤会超时.
猜想
猜想: 直觉上这很简单, Sysbench每建立一个连接, 都要消耗一个线程, 资源消耗过大导致超时.
验证: 修改Sysbench源码, 调大超时时间, 仍然会发生超时.
检查环境
猜想失败, 回到常规的环境检查:
MySQL error log 未见异常.
syslog 未见异常.
tcpdump 观察网络包未见异常, 连接能完成正常的三次握手; 只观察到在出问题的连接中, 有一部分的TCP握手的第一个SYN包发生了重传, 另一部分没有发生重传.
自己写一个简单的并发发生器, 替换sysbench, 可重现场景. 排除sysbench的影响
猜想2
怀疑 MySQL 在应用层因为某种原因, 没有发送握手包, 比如卡在某一个流程上:
检查MySQL堆栈未见异常, 仿佛MySQL在应用层没有看到新连接进入.
通过strace检查MySQL, 发现 accept() 调用确实没有感知到新连接.
怀疑是OS的原因, Google之, 得到参考文档: A TCP “stuck” connection mystery////syn-cookies.html
下图为精华总结
请点击输入描述