# V5压力测试工具和常见问题

# 前言

本文档提供压测工具、脚本下载地址,以及常见问题。

产品出场会做压测,建议项目上优先直接取标品的压测报告直接使用(公司系统-文档中心-营销中心-营销体系-销售管理知识库-产品下载地址Excel-对应版本云盘-文档-测试报告),以提升交付效率。

# 压测工具和教程

V5产品线压测工具、脚本、全套手册请访问:https://support.seeyon.com/cbo_cptjxx.html?id=1784406928019128321 (opens new window)

V5产品线压测教程,未看视频直接上手不予支持:https://fcndlqpk2w3r.feishu.cn/wiki/N6YJwJuZ3i9uLfkDHGkcQIhLnbf

# 压测问题通用排查方法

常见问题自助排查方法:在拿到压测报错信息时

1、访问开放平台FAQ搜索问题 https://open.seeyoncloud.com/#/faq

2、访问开放平台首页,通过首页的CoMi一搜智能搜索 https://open.seeyoncloud.com

3、参考本手册相关问题逐个排查问题原因!

1783668560120.png

遇到压测报错,把查看结果树里面的"仅错误日志"取消勾选,再运行,点击报错的接口查看"响应数据"

然后参考如下方式获取压测错误信息:

IMG_256

# 1 压测登录报错

# 1-1 所有账号压测都登录报错(V9.0SP1)

V9.0SP1版本如果压测出现登录错误,第一步就参考本方案检查解决:

找到压测脚本中的说明,里面有一个V9.0SP1登录必打补丁,按照补丁说明打到OA中,再重启OA压测。

注意,压测完需要删除刚才打的补丁,并重启OA。

# 1-2 所有账号压测都登录报错(V10.0版本以上)

V10.0及以上版本如果压测出现登录错误,第一步就参考本方案检查解决:

运行 SeeyonConfig,进入"系统参数设置"页签,将 login.support_clear_password 的值改成 true,参照下图,重启OA进行压测。

压测完成后,记得将其还原为false,确保密码以更安全的手段传输。

修改配置

# 1-3 响应数据显示__LOGOUT

原因:登录用户名、密码不对导致__LOGOUT

解决方式:检查账号是否有空格、回车,检查密码是否正确!

dc44e8e45ad4ad4e939ae12e77a8f0db

OA的日志会显示如下信息:

816b03828ce9be0824b9bcbf56291859

# 1-4 登录接口报错,提示超过了最大登录人数

解决方式:测试环境使用开发狗,并发数不够才提示登录报错,需要换成软加密狗,并发数 > 压测并发数

# 1-5 压测必打补丁 (登录接口补丁) 不兼容(G6-N9.0sp1)

G6-N9.0sp1 打上补丁后仍然不能登录,脚本增加 loginType 参数解决

# 1-6 其他登录报错可能原因

1、项目做了登录的定制开发,登录默认走了三方认证导致异常,需要客开关闭登录的客开代码,走标准产品的登录

2、项目开启了csrf——需要取后台关闭 csrf

# 2 表单场景压测报错

# 2-1 调用模板失败:templateId设置错误

现象:调用模板 baseinfo 操作出现异常;Response Body 返回 code 412, message 参数不能为空

根因:用户自定义变量中的表单模板 ID 填写错误,确认填写的是浏览器地址上的 templateId,不是表单模板 code

解决方案

  1. 用压测账号登录 OA,进入 协同工作新建事项
  2. 调用本次压测使用的表单模板,从浏览器地址栏 URL 中复制 templateId= 后面的值,这个值才是正确的 templateId(负数保留负号)
  3. 将正确值覆盖写入jmeter的 templateId 里面

取浏览器URL地址上面的templateId=后面的数字,更新到用户自定义变量配置中的模板ID上(图例是公文场景,表单场景也采用相同排查方案):

IMG_256

# 2-2 压测账号无流程模板调用权限

现象:表单模板相关请求失败;模板调用或模板读取不符合脚本预期,响应体含 没有权限 / 401 / 403

根因:检查账号是否有模板调用权限

解决方案

  1. CAP4应用设计师编辑流程表单模板,检查压测账号是否已被授权可调用该模板
  2. 如果未授权,给所有压测账号补充模板调用权限

1783585333712.png

# 2-3. 压测表单获取用户模板报错:Read timed out

现象:表单场景存在部分异常;异常多出现在获取用户模板 myTemplate 请求;异常响应提示 Read timed out

根因:检查 JMeter 脚本中 myTemplate HTTP 请求高级设置里的连接超时和响应超时

详细解决方案

  1. 在 JMeter 中打开压测脚本
  2. 找到获取用户模板的 HTTP 请求(名称通常包含 myTemplate
  3. 进入 高级 选项卡
  4. 找到 连接超时响应超时 输入框
  5. 将这两个超时数字清空(留空)
  6. 保存脚本后重新运行压测

# 2-4 提示节点权限被修改 请刷新页面

现象:处理表单阶段失败,响应数据提示 节点权限被修改 请刷新页面

根因:压测表单配置的工作流不是标准支持流程,没按照 ppt 规范来操作,流程模板第二个节点权限必须设置成相对角色-发起者!

排查步骤:浏览器登录系统 检查压测表单工作流是否为 发起人(发起) -> 相对角色-发起人(处理) -> 结束 如果不是,压测一概不支持!

解决方案

  1. 表单管理员进入 表单管理流程模板设置
  2. 打开压测使用的表单流程模板
  3. 检查流程节点设置,确保整体流程为:发起人(发起) -> 相对角色-发起人(处理) -> 结束
  4. 压测不支持多级审批、会签、转办、选人等复杂个性化流程
  5. 调整流程后保存模板
  6. 重新压测

1783583311412.png

# 2-5 发送表单报错-xx不能为空

现象:发送表单时出现必填项或字段校验错误

根因:压测表单模板存在必填校验,压测所有节点要求字段非必填。

排查步骤:直接浏览器登录,检查压测表单字段是否存在必填项,压测要求不能带必填项

解决方案

  1. 表单管理员登录 OA 系统 修改压测的流程表单字段操作权限
  2. 将所有节点、所有字段的必填校验取消勾选
  3. 保存模板后,用压测账号在浏览器验证:不填写任何字段也能直接提交
  4. 确认后重新压测

# 2-6. 分保插件导致 CAP4 表单提示密级不允许为空

现象:安装分保插件的环境压测 CAP4 表单失败;报错提示"已开启密级管理,密级不允许为空"

解决方案

  1. 联系系统管理员确认是否安装了分保插件
  2. 如果安装了分保插件,检查 OA 后台是否有界面开关可关闭密级管理
  3. 如果无法通过界面关闭,仅能在压测场景下临时修改数据库:参考FAQ《【压力测试】客户安装了分保插件,压测CAP4表单提示:已开启密级管理,密级不允许为空 (opens new window)
  4. 压测完成后,必须从备份表恢复原始密级配置,再次重启 OA
  5. 重新压测

# 2-7 表单获取用户模板耗时非常久

IMG_256

IMG_256

解决方案

通过后台抓取 Thread Dump 未见此线程的耗时,通过 capability.log 日志分析获取 myTemplate 模板耗时也非常短,在 1 秒以内。

尝试用当前电脑浏览器直接登录,查看我的模板页面,未见异常。

F12 清空缓存,重新打开我的模板,肉眼可见的加载缓慢。

再通过 NetWork 网络页签查看 myTemplate 获取我的模板请求,发现:我的模板数据 7M 以上,慢在下载数据场景。

IMG_256

问题原因确认:是因为我的模板数据量过大,卡在 JMeter 压测工具下载数据场景。

对比正常业务系统,我的模板数量仅仅 100KB 左右,而当前环境数量动辄 7M 以上,经过分析,发现此问题是在特殊数据场景下的程序 BUG,通过 BUG 修复再压测就 OK 了。

关联单号:JSFW-2025-01802

IMG_257

# 2-8 表单使用了复杂工作流

现象:处理表单阶段失败

根因:压测表单工作流不是标准支持流程

排查步骤:检查压测表单工作流是否为 发起人(发起) -> 相对角色-发起人(处理) -> 结束

解决方案

  1. CAP4表单管理员进入 表单管理流程模板设置
  2. 打开压测使用的表单流程模板
  3. 检查流程节点设置,确保整体流程为:发起人(发起) -> 相对角色-发起人(处理) -> 结束
  4. 压测不支持多级审批、会签、转办、选人等复杂个性化流程
  5. 调整流程后保存模板
  6. 重新压测

1783613322705.png

# 2-9 提示 401 错误

401 表示用户身份无权限,这种问题一般两种情况:

1、压测需要先进行登录,模拟登录获取用户身份后,再访问别的业务

2、压测的这个帐号没有访问对应业务的权限,本次问题是这个:压测时用了一个普通用户访问 CAP4 应用设计师角色才能访问的页面,被系统返回 401 拒绝

IMG_256

# 3 公文场景压测报错

# 3-1. templateId 配置错误

现象:1个账号冒烟测试公文场景也失败,第一条异常响应数据为空

根因:公文场景压测 templateid 填写错误,通常误把模板编号code当作templateId,未使用真实 templateId

解决方案

  1. 用压测账号 通过 浏览器登录 OA 系统
  2. 进入 公文管理发文拟文,选择本次压测使用的公文模板
  3. 在打开的发文页面中,从浏览器地址栏 URL 复制 templateId= 后面的一串数字(注意负数要保留负号)
  4. 将其填写到jmeter公文压测场景的配置中(配置方法可见PPT或视频说明)

IMG_256

# 3-2. 发文拟文权限缺失

现象:发文拟文场景失败newGovdoc的响应数据显示alert 解码后提示"没有发文拟文权限"

根因:压测账号没有发文拟文相关角色和权限

解决方案

  1. 集团管理员或单位管理员登录 OA 后台
  2. 进入 人员管理 → 找到失败压测账号
  3. 检查该账号的角色分配,补充分配公文的 发文拟文人员 角色权限
  4. 也可以用账号批量导入或同步功能给所有压测账号统一授权
  5. 授权后用同一批账号在浏览器验证:进入 公文管理发文拟文 能看到菜单并正常打开

如下图所示,取Unicode 转码工具解析,发现返回错误是:没有发文拟文权限。

IMG_256

# 3-3. 公文待办菜单报错-菜单已改变请联系管理员

现象:公文待办列表场景全失败,响应提示"菜单已改变请联系管理员"

根因:此问题出现在V9.0SP1及以上版本,老客户升级到V9.0SP1及以上版本公文菜单不是新菜单,用最新的那套菜单就能解决问题,新版本压测的是最新菜单的脚本。

解决方案: 使用集团管理员登录,进入角色权限设置,切换到单位角色,将与公文管理相关的角色重新分配菜单。例如:普通人员权限、公文管理员、发文拟文人员、快速发文人员、单位公文送文员等。

V10.0及以上版本实测即便使用老的公文菜单,脚本也是可以执行通过。不存在上述问题,无需调整菜单。

IMG_256

7f6bee26472ced482ba2b42fb52f53fd

# 3-4 无调用模板权限 请联系公文管理员

现象:公文拟文或调用模板时失败,错误与节点权限、流程权限或调用模板权限相关。响应体包含 没有权限 / 401 / 403

根因:发文拟文节点权限未设置为"发起者",或节点缺少"调用模板"动作

排查步骤:使用压测账号,进入公文应用管理,检查发文拟文节点是否有"调用模板"动作

解决方案

  1. 公文管理员登录 OA 系统
  2. 进入 公文管理流程模板设置,找到压测使用的流程模板
  3. 进入 公文应用功能设置 → 找到 发文拟文 节点
  4. 点击节点权限编辑,在操作权限列表中勾选 调用模板 动作
  5. 保存设置后重新执行压测

IMG_256

1、进入公文应用功能设置页面,修改 发文 的拟文节点权限

IMG_256

2、编辑页面添加 调用模板 的动作

IMG_257

# 3-5. 发送公文压测失败:存在必填字段

现象:公文模板已打开,失败集中在 b_发送公文send

根因:公文发起提交阶段存在必填字段,导致压测不通过,标准压测脚本只能自动填写公文标题,其余必填字段都会导致压测不通过。

解决方案

  1. 如果是必填字段或提交校验
    • 公文管理员进入 公文管理流程模板设置
    • 打开压测使用的流程模板
    • 进入发起节点(第一个节点)的操作权限设置,取消所有非必要的必填校验
    • 进入处理节点(第二个节点)的操作权限设置,同样取消所有必填校验
    • 保存模板后,用压测账号在浏览器验证:只填公文标题就能直接提交
  2. 如果是发起后选人
    • 公文管理员进入 公文管理流程模板设置
    • 将流程改为压测支持的固定链路:发起人(发起) -> 相对角色-发起人(处理) -> 结束
    • 保存模板后重新压测

# 3-6. 公文工作流不是标准支持流程

现象:公文发起后失败集中在 e_查看公文govdoc=summary 或处理公文节点

根因:流程处理人不是发起人。标准公文压测脚本由发起账号继续查看和处理待办;如果待办落到其他处理人账号,脚本取不到 affairId,后续查看等操作全部失败。

解决方案

  1. 公文管理员进入 公文管理流程模板设置
  2. 打开压测使用的公文流程模板
  3. 检查第二个节点(处理节点)的处理人设置
  4. 将处理节点改为 发起人相对角色-发起人
  5. 确保整体流程为:发起人(发起) -> 相对角色-发起人(处理) -> 结束

1783583311412.png

# 4 其它压测场景

# 4-1. 调查查看异常-测试账号没有调查数据

现象:调查查看场景失败,压测账号下没有可查看的调查

根因:压测账号所在单位没有提前准备调查数据

排查步骤:登录压测失败的账号,检查该账号下是否有调查数据

解决方案

  1. 用失败压测账号在浏览器登录 OA
  2. 进入 文化建设调查,检查该账号下调查列表是否为空
  3. 如果确实为空:说明压测账号所在单位没有发布调查,或其所在单位不在调查发布范围内
  4. 联系具备调查管理权限的账号,发布多条调查数据
  5. 发布时确保调查的发布范围覆盖所有压测账号所在单位
  6. 调查需要处于"可查看"状态,不能是已删除、已停用或已过期状态
  7. 发布后让压测账号重新进入调查页面,确认能正常查看列表和详情

# 4-2. 新闻查看异常-测试账号没有新闻数据

现象:新闻查看场景失败,压测账号下没有可查看的新闻

根因:压测账号所在单位没有提前准备新闻数据

排查步骤:登录压测失败的账号,检查该账号下是否有新闻数据

解决方案

  1. 用失败压测账号在浏览器登录 OA
  2. 进入 文化建设新闻,检查该账号下新闻列表是否为空
  3. 如果确实为空:说明压测账号所在单位没有发布新闻,或其所在单位不在新闻发布范围内
  4. 联系具备新闻管理权限的账号,发布多条新闻数据
  5. 发布时确保新闻的发布范围覆盖所有压测账号所在单位
  6. 新闻需要处于"已发布"且"可见"状态
  7. 发布后让压测账号重新进入新闻页面,确认能正常查看列表和详情

# 4-3. 公告查看场景-测试账号没有公告数据

现象:公告查看场景失败,压测账号下没有可查看的公告

根因:压测账号所在单位没有提前准备公告数据

排查步骤:登录压测失败的账号,检查该账号下是否有公告数据

解决方案

  1. 用失败压测账号在浏览器登录 OA
  2. 进入 文化建设公告,检查该账号下公告列表是否为空
  3. 如果确实为空:说明压测账号所在单位没有发布公告,或其所在单位不在公告发布范围内
  4. 联系具备公告管理权限的账号,发布多条公告数据
  5. 发布时确保公告的发布范围覆盖所有压测账号所在单位
  6. 公告需要处于"已发布"且"可见"状态
  7. 发布后让压测账号重新进入公告页面,确认能正常查看列表和详情

# 4-4. 自由协同发送阶段失败

现象:自由协同流程失败集中在 2.发送协同send;HTTP 响应码为 200,但断言 passed" : true 未通过;同一批线程在发送协同时停止,后续流程没有继续执行

根因:发送协同时被二次弹窗校验阻断。常见原因是系统开启了 AI 内容审校、条款审校或内容审校,发送时需要用户在页面上确认

排查步骤

  1. 用 failure-analysis.md 中首个待检查账号在浏览器登录压测系统
  2. 手工发起自由协同并点击发送,观察是否出现弹窗确认、AI 内容审校、条款审校或类似二次校验
  3. 确认发送动作是否必须由用户在前端弹窗里继续确认

解决方案

  1. 确认压测前准备
    • 所有压测账号必须能进入 协同工作,可以新建协同
    • 压测账号需要有待办、已办、已发三个菜单权限
    • 所有压测账号需要协同新建、发送、处理权限
  2. 取消二次弹窗校验
    • 系统管理员登录 OA 系统管理后台
    • 进入 系统模块管理
    • 找到协同模块的相关设置
    • 取消勾选 条款审校内容审校(如果已勾选)
    • 如果有 AI 内容审校功能,也一并关闭
    • 保存设置
  3. 手工验证
    • 用同一压测账号在浏览器中重新登录
    • 进入 协同工作新建事项
    • 发送一个自由协同,确认可以直接发送,不再出现弹窗校验
    • 打开待办 → 处理 → 查看结果,确认完整链路正常

# 5 其他常见问题

# 5-1 java.net.SocketException: Connection reset

jmeter 压测时出现 java.net.ConnectException: Connection timed out: connect 错误通常是由于目标服务器无法响应请求或网络连接问题导致的。

Ping ip -t,看是否有丢包。如果有,证明网络有问题,找客户网管检查。

# 5-2 Address already in use

JMeter Address Already in use 实测 2 种解决方案-CSDN 博客 (opens new window)

根据网页上方案 2 进行修改

https://blog.csdn.net/zhaoh_CSDN/article/details/129839576?spm=1001.2014.3001.5506 (opens new window)

18c051cd03da7011324303ca8bbafa5f

2025-12-15_174852

# 5-3 http 改成 https 后,访问总会访问 http 导致报错

84701fc7f4dacebd2521562c7664f8c2

请求设置 https,执行时跑了 http 和 https 两次

请求设置 post,执行时跑了 post 和 get 两次

解决方式:

  1. 取消勾选"跟随重定向"

  2. 响应断言请求头,且忽略状态

# 5-4 socket closed


java.net.SocketException: socket closed

at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)

at java.net.SocketInputStream.read(SocketInputStream.java:171)

at java.net.SocketInputStream.read(SocketInputStream.java:141)

at org.apache.jmeter.util.SlowInputStream.read(SlowInputStream.java:53)

at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)

at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)

at org.apache.http.impl.io.SessionInputBufferImpl.read(SessionInputBufferImpl.java:205)

at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:188)

at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:135)

at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:148)

at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.readResponse(HTTPSamplerBase.java:1906)

at org.apache.jmeter.protocol.http.sampler.HTTPAbstractImpl.readResponse(HTTPAbstractImpl.java:477)

at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:588)

at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:67)

at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1282)

at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1271)

at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:627)

at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:551)

at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:490)

at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:257)

at java.lang.Thread.run(Thread.java:750)


2020c454959ec5a95c82335d0503fdde

# 5-5 Address is invalid on local machine, or port is not valid on remote machine

原因: 网络访问到虚拟网卡,导致无法访问服务器地址;

解决方案: 强制使用 ipv4 网络;

找到 JMeter 安装目录下的 bin 文件夹,打开 system.properties 文件,在文件末尾添加:

java.net.preferIPv4Stack=true

保存文件后,重启 JMeter 即可生效。

d708f10fe8549bac9cd48d6520cecfbe

# 5-6 100 并发压测稳定,到 200 之后 Cannot open connection

尽量去找最早发生异常的请求,看下请求报什么错,根据日志分析下图所示的错误最可能引起失败:

Hibernate operation: Cannot open connection;

再进一步查看数据库配置:最大连接数只有 100,问题原因初步可以定性是:数据库连接不够,程序获取不到连接导致异常。

解决方案

  1. 需要扩大数据库的最大连接,比如扩大到 500(集群多节点要求更高);

  2. 需要调整 OA 中间件侧的最大连接数,比如通过 SeeyonConfig 应用配置将最大连接设置为 500;

如果压测数据要求更高,则扩大数据库连接。

IMG_256

IMG_256

IMG_256

# 5-7 Too many open files

由于操作系统(特别是 Linux)对单个进程可打开文件句柄数的限制所致。当大量并发请求压测时,OA 的 Java 进程会同时打开大量网络连接和文件,如果超出默认限制,就会导致"Too many open files"错误,进而影响 OA 服务。

步骤一:调整 OA 应用的中间件配置

如果确认是限制过低(例如 ulimit -n 显示为 1024),需要永久性调高。这需要系统管理员权限操作。

  1. 修改系统全局限制:编辑 /etc/sysctl.conf 文件,在末尾添加或修改以下配置,数值可以根据服务器性能适当增大(如 1048576):fs.file-max = 1048576 保存后,执行 sysctl -p 命令使配置生效。

  2. 修改用户级(OA 应用启动用户,通常是 root 或 seeyon)的限制:编辑 /etc/security/limits.conf 文件,在末尾添加以下配置(假设 OA 进程以 seeyon 用户启动):

    seeyon soft nofile 655360
    
    seeyon hard nofile 655360
    
    * soft nproc 65536
    
    * hard nproc 65536
    

    注意:seeyon 需要替换为实际的用户名。

步骤二:调整 OA 应用的中间件配置

仅仅提高操作系统限制还不够,还需要让 Tomcat 等中间件"感知"到这个更高的限制,并调整其自身的连接池等参数。

  1. 在 OA 启动脚本中设置句柄数: 找到并编辑 OA 的启动脚本 startup.sh(通常在 ApacheJetspeed/bin/ 目录下)。在脚本中设置 JVM 参数,通常可以在 JAVA_OPTS 变量后追加:

    # 例如,在原有配置基础上增加

    export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -XX:-UseGCOverheadLimit"

    # 或者将 ulimit -n 的调整命令也放在脚本中

    ulimit -n 655360

  2. 调整 Tomcat 连接器(Connector)参数: 编辑 ApacheJetspeed/conf/server.xml 文件,找到处理 HTTP 请求的 <Connector> 节点,调整以下参数以应对高并发:

    <Connector port="80" protocol="HTTP/1.1"

    maxThreads="1000" <!-- 最大线程数,根据压测需求调整 -->

    minSpareThreads="100" <!-- 最小空闲线程数 -->

    acceptCount="1000" <!-- 等待队列长度 -->

    connectionTimeout="20000"

    maxConnections="10000" <!-- 最大连接数 -->

    ...

    />

    注意:maxThreads 和 maxConnections 的值需要根据压测并发量和服务器硬件性能(尤其是 CPU 核心数)进行合理设置。

步骤三:重启并验证

完成以上所有配置修改后,需要重启 OA 服务才能生效。重启后,重复步骤一中的命令,确认新的句柄数限制已生效。

# 4 命令执行压测

./jmeter -n -t script/script.jmx -f -l jmeter.jtl -e -o script/report/script_report_600 并发_1

a95c8b34ebf30a40f8260eb184b47801

编撰人:het、wangyxyf

快速跳转