You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旧Notes应用XPages REST Service并发调用异常排查求助

XPages REST服务多请求冲突问题排查方向

我正在排查一款旧Notes应用的问题:该应用用XPages REST Service控件对外提供API,XPage引用了包含REST核心逻辑的SSJS脚本库。示例代码如下:

<xe:restService id="restService4" pathInfo="userRegistration">
    <xe:this.service>
        <xe:customRestService
            contentType="application/json"
            requestContentType="application/json"
            requestVar="userRegistration"
            doPost="#{javascript:RegisterCustomer(userRegistration)}">
        </xe:customRestService>
    </xe:this.service>
</xe:restService>

其中RegisterCustomer是SSJS库中的核心函数,负责POST请求体验证、数据查询,以及创建包含提交和查询数据的Notes文档。

单请求场景下一切正常,但同时接收多个请求时会出现各类错误,比如SSJS函数中使用NotesView对象时提示“Object has been removed or recycled”。已通过Postman性能测试复现问题,需要检查以下内容确保所有REST服务调用独立运行、互不干扰:

  • 排查SSJS脚本库的全局变量:如果RegisterCustomer函数或脚本库中存在函数外定义的全局变量(比如NotesSession、NotesDatabase、NotesView等对象),这些变量会被所有请求共享,一个线程回收对象后,另一个线程再访问就会触发报错。必须确保所有Notes对象都在函数内部局部声明、使用,用完及时回收。
  • 验证Notes对象的回收逻辑:SSJS的自动回收机制在高并发场景下可能有延迟,手动创建的NotesView、NotesDocument等对象,要在函数执行完毕前显式调用recycle()方法,且避免在循环或分支中遗漏回收。注意不要回收requestVar传入的对象,以及平台自动注入的session、database等对象。
  • 检查视图与文档的并发访问方式:如果使用了共享的视图实例,或者多线程同时操作同一文档,会导致对象状态异常。确保每次查询都重新获取视图实例,对文档操作时使用lock()方法加锁,避免并发修改冲突。
  • 确认XPages的线程隔离配置:查看XPage的viewState属性,若设置为"shared"会导致状态共享,改为"nostate"或"client"可减少服务器端状态共享风险。同时确认customRestService未配置共享上下文对象。
  • 排查SSJS中的静态缓存或共享数据结构:如果脚本库中用了全局缓存(比如var cache = cache || {}这种写法),会导致多个请求共享缓存数据,甚至缓存已回收的Notes对象。必须将缓存改为请求级别的局部缓存,或使用线程安全的缓存机制。
  • 检查Domino服务器线程池配置:HTTP线程池配置过小会导致请求排队或线程复用异常,查看服务器配置文档中的HTTP线程数设置,确保足够处理并发请求。
  • 验证请求数据处理的线程安全性:确认userRegistration请求体的解析过程没有使用共享对象存储临时数据,所有请求相关数据都保存在局部变量中。

内容的提问来源于stack exchange,提问作者Martin Perrie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:12:08