# 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、参考本手册相关问题逐个排查问题原因!

遇到压测报错,把查看结果树里面的"仅错误日志"取消勾选,再运行,点击报错的接口查看"响应数据"
然后参考如下方式获取压测错误信息:



# 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
解决方式:检查账号是否有空格、回车,检查密码是否正确!

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

# 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
解决方案:
- 用压测账号登录 OA,进入
协同工作→新建事项 - 调用本次压测使用的表单模板,从浏览器地址栏 URL 中复制
templateId=后面的值,这个值才是正确的 templateId(负数保留负号) - 将正确值覆盖写入jmeter的
templateId里面
取浏览器URL地址上面的templateId=后面的数字,更新到用户自定义变量配置中的模板ID上(图例是公文场景,表单场景也采用相同排查方案):

# 2-2 压测账号无流程模板调用权限
现象:表单模板相关请求失败;模板调用或模板读取不符合脚本预期,响应体含 没有权限 / 401 / 403
根因:检查账号是否有模板调用权限
解决方案:
- CAP4应用设计师编辑流程表单模板,检查压测账号是否已被授权可调用该模板
- 如果未授权,给所有压测账号补充模板调用权限

# 2-3. 压测表单获取用户模板报错:Read timed out
现象:表单场景存在部分异常;异常多出现在获取用户模板 myTemplate 请求;异常响应提示 Read timed out
根因:检查 JMeter 脚本中 myTemplate HTTP 请求高级设置里的连接超时和响应超时
详细解决方案:
- 在 JMeter 中打开压测脚本
- 找到获取用户模板的 HTTP 请求(名称通常包含
myTemplate) - 进入
高级选项卡 - 找到
连接超时和响应超时输入框 - 将这两个超时数字清空(留空)
- 保存脚本后重新运行压测
# 2-4 提示节点权限被修改 请刷新页面
现象:处理表单阶段失败,响应数据提示 节点权限被修改 请刷新页面
根因:压测表单配置的工作流不是标准支持流程,没按照 ppt 规范来操作,流程模板第二个节点权限必须设置成相对角色-发起者!
排查步骤:浏览器登录系统 检查压测表单工作流是否为 发起人(发起) -> 相对角色-发起人(处理) -> 结束 如果不是,压测一概不支持!
解决方案:
- 表单管理员进入
表单管理→流程模板设置 - 打开压测使用的表单流程模板
- 检查流程节点设置,确保整体流程为:
发起人(发起) -> 相对角色-发起人(处理) -> 结束 - 压测不支持多级审批、会签、转办、选人等复杂个性化流程
- 调整流程后保存模板
- 重新压测


# 2-5 发送表单报错-xx不能为空
现象:发送表单时出现必填项或字段校验错误
根因:压测表单模板存在必填校验,压测所有节点要求字段非必填。
排查步骤:直接浏览器登录,检查压测表单字段是否存在必填项,压测要求不能带必填项
解决方案:
- 表单管理员登录 OA 系统 修改压测的流程表单字段操作权限
- 将所有节点、所有字段的必填校验取消勾选
- 保存模板后,用压测账号在浏览器验证:不填写任何字段也能直接提交
- 确认后重新压测

# 2-6. 分保插件导致 CAP4 表单提示密级不允许为空
现象:安装分保插件的环境压测 CAP4 表单失败;报错提示"已开启密级管理,密级不允许为空"
解决方案:
- 联系系统管理员确认是否安装了分保插件
- 如果安装了分保插件,检查 OA 后台是否有界面开关可关闭密级管理
- 如果无法通过界面关闭,仅能在压测场景下临时修改数据库:参考FAQ《【压力测试】客户安装了分保插件,压测CAP4表单提示:已开启密级管理,密级不允许为空 (opens new window)》
- 压测完成后,必须从备份表恢复原始密级配置,再次重启 OA
- 重新压测
# 2-7 表单获取用户模板耗时非常久


解决方案
通过后台抓取 Thread Dump 未见此线程的耗时,通过 capability.log 日志分析获取 myTemplate 模板耗时也非常短,在 1 秒以内。
尝试用当前电脑浏览器直接登录,查看我的模板页面,未见异常。
F12 清空缓存,重新打开我的模板,肉眼可见的加载缓慢。
再通过 NetWork 网络页签查看 myTemplate 获取我的模板请求,发现:我的模板数据 7M 以上,慢在下载数据场景。

问题原因确认:是因为我的模板数据量过大,卡在 JMeter 压测工具下载数据场景。
对比正常业务系统,我的模板数量仅仅 100KB 左右,而当前环境数量动辄 7M 以上,经过分析,发现此问题是在特殊数据场景下的程序 BUG,通过 BUG 修复再压测就 OK 了。
关联单号:JSFW-2025-01802

# 2-8 表单使用了复杂工作流
现象:处理表单阶段失败
根因:压测表单工作流不是标准支持流程
排查步骤:检查压测表单工作流是否为 发起人(发起) -> 相对角色-发起人(处理) -> 结束
解决方案:
- CAP4表单管理员进入
表单管理→流程模板设置 - 打开压测使用的表单流程模板
- 检查流程节点设置,确保整体流程为:
发起人(发起) -> 相对角色-发起人(处理) -> 结束 - 压测不支持多级审批、会签、转办、选人等复杂个性化流程
- 调整流程后保存模板
- 重新压测

# 2-9 提示 401 错误
401 表示用户身份无权限,这种问题一般两种情况:
1、压测需要先进行登录,模拟登录获取用户身份后,再访问别的业务
2、压测的这个帐号没有访问对应业务的权限,本次问题是这个:压测时用了一个普通用户访问 CAP4 应用设计师角色才能访问的页面,被系统返回 401 拒绝

# 3 公文场景压测报错
# 3-1. templateId 配置错误
现象:1个账号冒烟测试公文场景也失败,第一条异常响应数据为空
根因:公文场景压测 templateid 填写错误,通常误把模板编号code当作templateId,未使用真实 templateId
解决方案:
- 用压测账号 通过 浏览器登录 OA 系统
- 进入
公文管理→发文拟文,选择本次压测使用的公文模板 - 在打开的发文页面中,从浏览器地址栏 URL 复制
templateId=后面的一串数字(注意负数要保留负号) - 将其填写到jmeter公文压测场景的配置中(配置方法可见PPT或视频说明)

# 3-2. 发文拟文权限缺失
现象:发文拟文场景失败newGovdoc的响应数据显示alert 解码后提示"没有发文拟文权限"
根因:压测账号没有发文拟文相关角色和权限
解决方案:
- 集团管理员或单位管理员登录 OA 后台
- 进入
人员管理→ 找到失败压测账号 - 检查该账号的角色分配,补充分配公文的
发文拟文人员角色权限 - 也可以用账号批量导入或同步功能给所有压测账号统一授权
- 授权后用同一批账号在浏览器验证:进入
公文管理→发文拟文能看到菜单并正常打开
如下图所示,取Unicode 转码工具解析,发现返回错误是:没有发文拟文权限。

# 3-3. 公文待办菜单报错-菜单已改变请联系管理员
现象:公文待办列表场景全失败,响应提示"菜单已改变请联系管理员"
根因:此问题出现在V9.0SP1及以上版本,老客户升级到V9.0SP1及以上版本公文菜单不是新菜单,用最新的那套菜单就能解决问题,新版本压测的是最新菜单的脚本。
解决方案: 使用集团管理员登录,进入角色权限设置,切换到单位角色,将与公文管理相关的角色重新分配菜单。例如:普通人员权限、公文管理员、发文拟文人员、快速发文人员、单位公文送文员等。
V10.0及以上版本实测即便使用老的公文菜单,脚本也是可以执行通过。不存在上述问题,无需调整菜单。


# 3-4 无调用模板权限 请联系公文管理员
现象:公文拟文或调用模板时失败,错误与节点权限、流程权限或调用模板权限相关。响应体包含 没有权限 / 401 / 403
根因:发文拟文节点权限未设置为"发起者",或节点缺少"调用模板"动作
排查步骤:使用压测账号,进入公文应用管理,检查发文拟文节点是否有"调用模板"动作
解决方案:
- 公文管理员登录 OA 系统
- 进入
公文管理→流程模板设置,找到压测使用的流程模板 - 进入
公文应用功能设置→ 找到发文拟文节点 - 点击节点权限编辑,在操作权限列表中勾选
调用模板动作 - 保存设置后重新执行压测

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

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

# 3-5. 发送公文压测失败:存在必填字段
现象:公文模板已打开,失败集中在 b_发送公文 或 send
根因:公文发起提交阶段存在必填字段,导致压测不通过,标准压测脚本只能自动填写公文标题,其余必填字段都会导致压测不通过。
解决方案:
- 如果是必填字段或提交校验:
- 公文管理员进入
公文管理→流程模板设置 - 打开压测使用的流程模板
- 进入发起节点(第一个节点)的操作权限设置,取消所有非必要的必填校验
- 进入处理节点(第二个节点)的操作权限设置,同样取消所有必填校验
- 保存模板后,用压测账号在浏览器验证:只填公文标题就能直接提交
- 公文管理员进入
- 如果是发起后选人:
- 公文管理员进入
公文管理→流程模板设置 - 将流程改为压测支持的固定链路:
发起人(发起) -> 相对角色-发起人(处理) -> 结束 - 保存模板后重新压测
- 公文管理员进入
# 3-6. 公文工作流不是标准支持流程
现象:公文发起后失败集中在 e_查看公文 或 govdoc=summary 或处理公文节点
根因:流程处理人不是发起人。标准公文压测脚本由发起账号继续查看和处理待办;如果待办落到其他处理人账号,脚本取不到 affairId,后续查看等操作全部失败。
解决方案:
- 公文管理员进入
公文管理→流程模板设置 - 打开压测使用的公文流程模板
- 检查第二个节点(处理节点)的处理人设置
- 将处理节点改为
发起人或相对角色-发起人 - 确保整体流程为:
发起人(发起) -> 相对角色-发起人(处理) -> 结束

# 4 其它压测场景
# 4-1. 调查查看异常-测试账号没有调查数据
现象:调查查看场景失败,压测账号下没有可查看的调查
根因:压测账号所在单位没有提前准备调查数据
排查步骤:登录压测失败的账号,检查该账号下是否有调查数据
解决方案:
- 用失败压测账号在浏览器登录 OA
- 进入
文化建设→调查,检查该账号下调查列表是否为空 - 如果确实为空:说明压测账号所在单位没有发布调查,或其所在单位不在调查发布范围内
- 联系具备调查管理权限的账号,发布多条调查数据
- 发布时确保调查的发布范围覆盖所有压测账号所在单位
- 调查需要处于"可查看"状态,不能是已删除、已停用或已过期状态
- 发布后让压测账号重新进入调查页面,确认能正常查看列表和详情
# 4-2. 新闻查看异常-测试账号没有新闻数据
现象:新闻查看场景失败,压测账号下没有可查看的新闻
根因:压测账号所在单位没有提前准备新闻数据
排查步骤:登录压测失败的账号,检查该账号下是否有新闻数据
解决方案:
- 用失败压测账号在浏览器登录 OA
- 进入
文化建设→新闻,检查该账号下新闻列表是否为空 - 如果确实为空:说明压测账号所在单位没有发布新闻,或其所在单位不在新闻发布范围内
- 联系具备新闻管理权限的账号,发布多条新闻数据
- 发布时确保新闻的发布范围覆盖所有压测账号所在单位
- 新闻需要处于"已发布"且"可见"状态
- 发布后让压测账号重新进入新闻页面,确认能正常查看列表和详情
# 4-3. 公告查看场景-测试账号没有公告数据
现象:公告查看场景失败,压测账号下没有可查看的公告
根因:压测账号所在单位没有提前准备公告数据
排查步骤:登录压测失败的账号,检查该账号下是否有公告数据
解决方案:
- 用失败压测账号在浏览器登录 OA
- 进入
文化建设→公告,检查该账号下公告列表是否为空 - 如果确实为空:说明压测账号所在单位没有发布公告,或其所在单位不在公告发布范围内
- 联系具备公告管理权限的账号,发布多条公告数据
- 发布时确保公告的发布范围覆盖所有压测账号所在单位
- 公告需要处于"已发布"且"可见"状态
- 发布后让压测账号重新进入公告页面,确认能正常查看列表和详情
# 4-4. 自由协同发送阶段失败
现象:自由协同流程失败集中在 2.发送协同 或 send;HTTP 响应码为 200,但断言 passed" : true 未通过;同一批线程在发送协同时停止,后续流程没有继续执行
根因:发送协同时被二次弹窗校验阻断。常见原因是系统开启了 AI 内容审校、条款审校或内容审校,发送时需要用户在页面上确认
排查步骤:
- 用 failure-analysis.md 中首个待检查账号在浏览器登录压测系统
- 手工发起自由协同并点击发送,观察是否出现弹窗确认、AI 内容审校、条款审校或类似二次校验
- 确认发送动作是否必须由用户在前端弹窗里继续确认
解决方案:
- 确认压测前准备:
- 所有压测账号必须能进入
协同工作,可以新建协同 - 压测账号需要有待办、已办、已发三个菜单权限
- 所有压测账号需要协同新建、发送、处理权限
- 所有压测账号必须能进入
- 取消二次弹窗校验:
- 系统管理员登录 OA 系统管理后台
- 进入
系统模块管理 - 找到协同模块的相关设置
- 取消勾选
条款审校和内容审校(如果已勾选) - 如果有 AI 内容审校功能,也一并关闭
- 保存设置
- 手工验证:
- 用同一压测账号在浏览器中重新登录
- 进入
协同工作→新建事项 - 发送一个自由协同,确认可以直接发送,不再出现弹窗校验
- 打开待办 → 处理 → 查看结果,确认完整链路正常
# 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 进行修改


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

请求设置 https,执行时跑了 http 和 https 两次
请求设置 post,执行时跑了 post 和 get 两次
解决方式:
取消勾选"跟随重定向"
响应断言请求头,且忽略状态
# 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)

# 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 即可生效。

# 5-6 100 并发压测稳定,到 200 之后 Cannot open connection
尽量去找最早发生异常的请求,看下请求报什么错,根据日志分析下图所示的错误最可能引起失败:
Hibernate operation: Cannot open connection;
再进一步查看数据库配置:最大连接数只有 100,问题原因初步可以定性是:数据库连接不够,程序获取不到连接导致异常。
解决方案
需要扩大数据库的最大连接,比如扩大到 500(集群多节点要求更高);
需要调整 OA 中间件侧的最大连接数,比如通过 SeeyonConfig 应用配置将最大连接设置为 500;
如果压测数据要求更高,则扩大数据库连接。



# 5-7 Too many open files
由于操作系统(特别是 Linux)对单个进程可打开文件句柄数的限制所致。当大量并发请求压测时,OA 的 Java 进程会同时打开大量网络连接和文件,如果超出默认限制,就会导致"Too many open files"错误,进而影响 OA 服务。
步骤一:调整 OA 应用的中间件配置
如果确认是限制过低(例如 ulimit -n 显示为 1024),需要永久性调高。这需要系统管理员权限操作。
修改系统全局限制:编辑 /etc/sysctl.conf 文件,在末尾添加或修改以下配置,数值可以根据服务器性能适当增大(如 1048576):fs.file-max = 1048576 保存后,执行 sysctl -p 命令使配置生效。
修改用户级(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 等中间件"感知"到这个更高的限制,并调整其自身的连接池等参数。
在 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
调整 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
