EOS Low-Code Platform 8 EOS Low-Code Platform 8
产品简介
学习指南
更新说明
安装与集成
上线指南
初见EOS
低代码开发手册
专业代码开发手册
专题场景实战
公共服务框架
应用运行治理
最佳实践
运维指南
  • 低代码平台响应慢问题排查与解决指南
  • 1. 主机名解析问题
  • 2. 子表中存在大字段,导致接口返回数据较大且响应慢
  • 3. 子表格数据量过大导致页面卡顿
  • 4. Nginx配置不当
  • 5. 数据库连接池问题
  • 6. 资源容器/标签页懒加载问题
  • 7. 附件预览/下载慢
  • 8. 接口调用超时(SocketTimeoutException)
  • 终极手段

# 低代码平台响应慢问题排查与解决指南

当系统出现响应缓慢、页面加载卡顿或操作超时时,可以参考以下指南按步骤排查。每个问题对应一个独立的排查方向。


# 1. 主机名解析问题

  • 现象:系统启动慢,或所有接口(尤其是通过网关访问的接口)响应慢(可能达到10秒以上)。
  • 排查:
    1. 检查应用服务器(特别是Linux系统)的 /etc/hosts 文件。
    2. 查看是否配置了 127.0.0.1 你的主机名。
  • 解决方案:
    1. 编辑 /etc/hosts 文件。
    2. 确保主机名(由 hostname 命令获得)正确解析到内网IP地址,而不是 127.0.0.1。
    3. 格式示例:192.168.1.100 my-server-hostname。
    4. 修改后重启应用。

# 2. 子表中存在大字段,导致接口返回数据较大且响应慢

  • 现象:子表存在 mediumtext 字段,导致接口查询时返回数据达到30M,响应时间30s。
  • 排查:
    1. 在浏览器开发者工具(F12)中,找到查询主表详情的接口(通常是 detail 或 query-with-page)。
    2. 查看该接口的响应体(Response),确认返回数据的大小(如30+ MB)。
    3. 检查响应数据中,子表部分的数据量是否巨大,并且包含了非常长的文本内容。
  • 解决方案: 默认查询时不加载子表的大字段内容,仅在需要时按需加载。可以通过修改实体字段类型并利用平台“排除大字段”功能来实现。
    1. 进入EOS开发中心,找到并打开对应的子实体,将子实体text字段的字段类型改为clobString(只改实体)。 实体字段类型配置
    2. 在主表单中开启排除大字段功能。 排除大字段
      注意:此步骤只修改实体定义,不会更改数据库表结构。ClobString 类型是EOS框架提供的一种特殊类型,用于处理大数据字段,并支持按需加载。

# 3. 子表格数据量过大导致页面卡顿

  • 现象:主表单中嵌入的子表格,当数据量达到几百行时,页面新增、编辑、保存操作变得非常卡顿,甚至卡死。
  • 排查:
    1. 确认问题页面是否存在1对N关系的子表格。
    2. 确认子表格的数据行数是否过大(如超过200条)。
  • 解决方案:
    1. 为子表格开启分页功能。 分页
    2. 通过分页控制每页显示的数据量(如每页10条),避免一次性渲染所有数据行。
    3. 注意:如果子表格不支持分页(如某些特殊场景),可以考虑通过API this.Api.loadEntity({ id: this.formData.id }, true) 的方式刷新整个表单,而不是直接操作子表格的DOM。

# 4. Nginx配置不当

  • 现象:页面加载慢,但直接访问后端服务接口很快。
  • 排查:
    1. 对比直接访问后端端口和通过Nginx访问同一接口的响应时间。
  • 解决方案:
    1. 优化Nginx配置,确保以下超时参数设置合理(通常建议设为60秒以上):
      proxy_connect_timeout 60s;
      proxy_read_timeout 60s;
      proxy_send_timeout 60s;
      
    2. 调整后重启Nginx。

# 5. 数据库连接池问题

  • 现象:服务启动正常,运行一段时间后,数据库操作报错,如“An attempt by a client to checkout a connection has timed out”或“连接不可用”。
  • 排查:
    1. 检查应用日志,查找数据库连接超时或无可用连接的报错。
    2. 检查应用的数据源配置(通常在 user-config.xml 或 application.properties 中)。
  • 解决方案:
    1. 检查并调整连接池参数,例如c3p0的 maxPoolSize, acquireIncrement, checkoutTimeout。
    2. 关键点:某些数据源(如用于报表的)的帮助进程数(如numHelperThreads)必须设置为 >0,否则会导致应用启动时数据源加载失败而堵塞。
    3. 避免最小连接数设置得比连接池还大。

# 6. 资源容器/标签页懒加载问题

  • 现象:包含多个标签页或资源容器的页面首次加载很慢。
  • 排查: 检查页面设计,是否在不可见的标签页中也加载了复杂的视图或数据。
  • 解决方案: 为标签页组件或资源容器开启“懒加载”功能。这样只有在用户切换到该标签页时,才会去加载其中的数据和视图,从而提高首屏加载速度。 懒加载

# 7. 附件预览/下载慢

  • 现象:下载或预览大文件时,页面一直转圈或报错。
  • 排查:
    1. 确认文件大小。
    2. 检查Nginx的超时时间配置。
  • 解决方案:
    1. 参考第2点,调整Nginx的 proxy_read_timeout。
    2. 如果附件存储在数据库中(DB模式)且文件很大,建议考虑将附件存储改为本地文件系统或对象存储(如MinIO),以减轻数据库压力。

# 8. 接口调用超时(SocketTimeoutException)

  • 现象:服务间调用或调用外部接口时,出现 java.net.SocketTimeoutException: Read timed out。
  • 排查:
    1. 定位是哪个HTTP/REST请求超时。
  • 解决方案:
    1. 如果是逻辑流中的Rest图元:检查目标服务的响应速度。
    2. 如果是流程引擎事件调用:对于同步调用耗时过长的情况,建议将调用方式改为“异步”,避免阻塞流程主线程。

# 终极手段

如果以上步骤都无法解决问题:

  1. 采集完整信息:

    • 问题发生时间点
    • 具体哪个页面/功能慢
    • 是否所有用户受影响
    • 近期数据量变化
    • 连续3次的jstack日志
  2. 按模板反馈给普元售后,可大幅减少沟通时间。

记住:80%的性能问题都出在数据量大、索引缺失、锁等待和代码逻辑上,按此指南一步步排查,总能找到根因。

← 内存溢出问题排查与解决指南 启动失败问题排查解决指南 →