皮皮网

皮皮网

【android本地源码工具】【unity 台球项目源码】【吾爱表白网页源码】sysbench源码

时间:2024-11-19 02:17:34 分类:焦点

1.简单而强大的源码基准测试开源工具sysbench详解
2.高并发的MySQL数据查询时,会不会选择数据库连接池?

sysbench源码

简单而强大的基准测试开源工具sysbench详解

       sysbench是一款强大的开源基准测试工具,它以其模块化和跨平台特性而备受青睐,源码用于评估系统性能,源码特别是源码针对CPU、内存、源码文件I/O和数据库操作。源码android本地源码工具其核心是源码基于LuaJIT的多线程设计,适用于数据库测试,源码支持诸如oltp_*.lua的源码预设测试和Lua扩展,为自定义性能测试提供了灵活性。源码

       sysbench的源码基础是轻量级脚本语言Lua,它具有动态类型和自动内存管理等特性,源码而LuaJIT作为其高性能即时编译器,源码显著降低了动态语言的源码开销,提升了性能。源码sysbench通过编译安装简单便捷,支持Linux(x_、unity 台球项目源码i和aarch)和Windows(WSL)环境。在RHEL/CentOS上,用户可以选择在线安装或源码编译,确保了与其他依赖包的兼容性,如mysql-devel、openssl-devel和postgresql-devel。

       安装sysbench时,用户可以根据需求配置MySQL或PostgreSQL支持。吾爱表白网页源码如果不支持MySQL,编译时可选择不包含。sysbench命令行提供了丰富的选项,如`--threads`、`--events`和`--time`等,用于细致调整测试参数。其结果以秒为单位实时报告,包括速率、ios开项目源码延迟统计,并允许自定义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

       下图为精华总结

       请点击输入描述