性能常识 关于压力测试的一个问题 (Oracle、服务组件 TPS 无法提高相关)

Aiden · 2021年10月27日 · 最后由 混泥土瞬间移动工程师 回复于 2021年10月31日 · 3938 次阅读

我在进行一次压力测试的时候遇到一个问题。请大神帮忙看下:
1.我在对我的服务进行接口压力测试的时候,提高压力工具的并发路数,系统 TPS 只能维持在 400TPS 左右,响应时间在 100ms。我看我服务器的资源占用非常少,cpu 和内存均不超过 50%。如果是这样,我的系统一般瓶颈会在哪里,有什么查看方法。
2.我的后台服务会连接一个 Oracle 的数据库。如果我把 oracle 和后台服务部署在 2 台机器上,系统的 tps 在 400 左右,如果部署在同一台机器上,tps 在 900 左右。这个是为啥啊?
3.我调用的接口是 “校验客户密码”,用的还是同一个用户,这样是不是存在一个读取数据库缓存的概念?

共收到 7 条回复 时间 点赞

我在压测的时候,把后台服务和 Oracle 部署在同一台机器上的资源占用情况:

应用服务器一般不会跟数据库服务器放在同一台把 建议还是分开测

Aiden 回复

1.我在对我的服务进行接口压力测试的时候,提高压力工具的并发路数,系统 TPS 只能维持在 400TPS 左右,响应时间在 100ms。我看我服务器的资源占用非常少,cpu 和内存均不超过 50%。如果是这样,我的系统一般瓶颈会在哪里,有什么查看方法。

个人经验,实际资源消耗不大,但性能上不去,那可能是某些配置限制了资源消耗,导致虽然资源没耗光,但已经没法增加消耗了。这类限制大多是在系统配置、jvm 配置、数据库连接配置等各个系统平台的配置项里,可以先排查下这些配置是否有不合理的地方(PS:如果这些配置都是用系统默认的没动过,那一定是有不合理的地方的,可以找运维协助优化一波配置项)。

2.我的后台服务会连接一个 Oracle 的数据库。如果我把 oracle 和后台服务部署在 2 台机器上,系统的 tps 在 400 左右,如果部署在同一台机器上,tps 在 900 左右。这个是为啥啊?

单纯从你的现象看,像是这两台机器之间网络连接速率太低,导致性能下降,但无法百分百确定。建议你先确认下,这两台电脑之间网络通讯的延迟和速率信息?另外,你分开部署的 2 台机器,配置和单台机器有多大差别,会不会这 2 台机器性能比 1 台机器的时候差,所以引起性能下降?

3.我调用的接口是 “校验客户密码”,用的还是同一个用户,这样是不是存在一个读取数据库缓存的概念?

这个要问开发系统背后的具体实现逻辑,理论上既可以走缓存,也可以走每次都查数据库的。至于选哪个要看开发的取舍。

  • cpu 和内存占用不高,问题可能在 I/O 上;
  • 也可能和程序代码逻辑有相关,存在锁竞争,线程阻塞;

响应时间只有 100ms,QPS 只有 400,而且性能上不去,很可能是压力机的问题。
(1)请问压测工具的并发数大概多少?提高并发 TPS 变化不大,可能是并发压力太小,建议可以增加到 100 并发看看
(2)压力机和被压服务器建议处于同一网段,局域网访问

同楼上
问题一:直觉上就是发压机的配置跟不上,如果你是用 PC 机发压,这个可能就更大了。建议关注一下发压机的配置,以及发压机在发压时候的资源占用情况。

问题二:可以先盘点一下,部署在两台不同的机器上会有什么差异

  • 环境:机器配置(是否有一台的配置特别拉胯)、环境变量、
  • 网络:不在一个局域网,是否距离比较远如异地机器
  • 其他……(甚至可能是你在单台部署和两台部署时,没有控制好变量出现的差异)

问题三:具体要看业务逻辑实现,对于 “校验客户密码” 这种接口,应该是每次都要查询数据库,合理的代码实现不应该使用缓存

1.有可能是压力不够,脚本问题
2.有可能是服务限制只用一个进程跑这个任务

大概率是第一个问题,多加几台压测机试试

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册