Xpages Domino10JavaXPage在一段时间后导致服务器崩溃,造成恐慌:信号量无效或未分配

Xpages Domino10JavaXPage在一段时间后导致服务器崩溃,造成恐慌:信号量无效或未分配,xpages,lotus-notes,lotus-domino,Xpages,Lotus Notes,Lotus Domino,我有一个java XPages domino应用程序,它运行在我的服务器上,充当远程处理Rooms&Resources数据库的API(主要角色是获取一组房间的预订并定期更新) 测试时一切正常,但一旦我将应用程序放到生产服务器上,一段时间后我就崩溃了: Domino version: Release 10.0.1FP3 August 09, 2019 OS Version: Windows/2016 10.0 [64-bit] 大多数操作都依赖于在names.nsf的$Rooms

我有一个java XPages domino应用程序,它运行在我的服务器上,充当远程处理Rooms&Resources数据库的API(主要角色是获取一组房间的预订并定期更新)

测试时一切正常,但一旦我将应用程序放到生产服务器上,一段时间后我就崩溃了:

Domino version:     Release 10.0.1FP3 August 09, 2019
OS Version:     Windows/2016 10.0 [64-bit]
大多数操作都依赖于在
names.nsf
$Rooms
视图中通过其internet地址搜索房间,然后前往其适当的RnR数据库并获取该特定房间的所有预订文档。有时(尽管很少)我也会打开用户日历并创建/更新预订

起初,我认为这是由内存泄漏或其他原因造成的,我检查了所有代码,找到了所有我能找到的东西(我发现了一些明显的句柄泄漏的地方),但根本没有帮助

让我烦恼的是,车祸发生在几乎相同的时间(4天后,上午10点后几分钟)

这次车祸的原因是什么?我不擅长读取转储数据,但我可以看到致命堆栈调用列表中的第一个调用是一个RecycleObject,后面是一些与日历相关的东西

我不知道我的代码应该在哪里查找,为什么循环使用会使服务器崩溃?
ANCalendar
是否建议我不要直接查看访问数据库的代码,而是打开用户日历

更新 通过研究事故日志,我找到了事故发生的地点。这是我的约会创建代码,它使用用户日历上的
NotesCalendar.createEntry()
。代码如下所示:

Session Session=reDatabase.getParent();
Name nnOrganizer=session.createName(session.getEffectiveUserName());
字符串organizerEmail=“”;
DirectoryNavigator nav=session.getDirectory().lookupNames($Users),nnOrganizer.getCommon(),“InternetAddress”);
if(nav.findFirstMatch()&&!nav.getFirstItemValue().isEmpty()){
organizerEmail=(字符串)nav.getFirstItemValue().get(0);
}
回收商。回收(nav);
Name nnResource=session.createName(roomName);
DbDirectory=session.getDbDirectory(session.getServerName());
Database mdb=dir.openMailDatabase();
NotesCalendar cal=session.getCalendar(mdb);
字符串dStart=DateUtil.formatICalendar(dtStart);
字符串dEnd=DateUtil.formatICalendar(dtEnd);
字符串iCalEntry=“开始:VCALENDAR\n”+
//iCalendar字符串的其余部分在这里
iCalEntry+=“结束:VEVENT\n”+
“结束:VCALENDAR\n”;
cal.setAutoSendNotices(真);
字符串apptUNID=“”;
试一试{
NotesCalendarEntry=cal.createEntry(iCalEntry);
Document doc=entry.getAsDocument();
apptUNID=doc.getItemValueString(“apptUNID”);
回收商。回收(单据、分录);
}捕获(注意:异常){
System.out.println(“无法创建约会:”+ex.toString());
掷骰子;
}最后{
回收(mdb、cal、nnOrganizer、nnResource、dir、reDatabase、session);
}
返回apptUNID;//返回所创建条目的UNID(如果有)
考虑到致命的调用堆栈是从一个
RecycleObject
调用开始的,我在这里的循环有什么问题吗?我可以在创建日历条目后直接循环使用它吗?我仍然有点困惑,但这段代码在我的测试服务器上运行良好。有什么不对吗?
这是创建约会时执行的最后一段代码,在调用上述函数后,将直接使用apptUNID进行HTTP响应。

可能其他程序正在干扰您的计划(agent/xpage?)程序。例如,当代码运行时,压缩任务使数据库离线片刻。我猜您可能回收了一些不应该回收的东西-因为代码中有另一个对象引用了相同的项目、文档、视图等,所以当您再次进入并回收它时。。。繁荣但这只是一个猜测。如果这是第一个任务(某项任务需要关闭数据库),那么我如何保护自己不受它的影响?有没有办法检查数据库是否脱机?我设法找出了问题所在,确实是在我的约会创建代码中,它使用了NotesCalendar。我更新了我的问题。可能其他程序正在干扰您的计划(代理/xpage?)程序。例如,当代码运行时,压缩任务使数据库离线片刻。我猜您可能回收了一些不应该回收的东西-因为代码中有另一个对象引用了相同的项目、文档、视图等,所以当您再次进入并回收它时。。。繁荣但这只是一个猜测。如果这是第一个任务(某项任务需要关闭数据库),那么我如何保护自己不受它的影响?有没有办法检查数据库是否脱机?我设法找出了问题所在,确实是在我的约会创建代码中,它使用了NotesCalendar。我更新了我的问题。
Error Message = PANIC: semaphore invalid or not allocated
    SharedDPoolSize = 33554432
    FaultRecovery = 0x00010012
    Cleanup Script Timeout= 600
    Crash Limits = 3 crashes in 5 minutes
    StaticHang = Virtual Thread [   nHTTP:  0674:  0011] (Native thread [   nHTTP:  0674:  145c]) (0x674/0x11/0x170000145C)
    ConfigFileSem =  (  SEM:#0:0x1520000010D) n=0, wcnt=-1, Users=-1,  Owner=[        :  0000]
    FDSem         =  ( RWSEM:#53:0x410f) rdcnt=-1, refcnt=0 Writer=[        :  0000], n=53, wcnt=-1, Users=0,  Owner=[        :  0000]

<@@ ------ Notes Data -> OS Data -> Semaphores -> SEM Info (Time 10:34:34) ------ @@>

     SpinLockIterations   = 1500
     FirstFreeSem         = 819
     SemTableSize         = 827
############################################################
### thread 46/89: [   nHTTP:  0674:  145c] FATAL THREAD (Panic)
### FP=0xF3AC3F61E8, PC=0x7FFFC6DD5AC4, SP=0xF3AC3F61E8
### stkbase=0xF3AC400000, total stksize=1048576, used stksize=40472
### EAX=0x00000004, EBX=0x00000000, ECX=0x00001c6c, EDX=0x00000000
### ESI=0x000927c0, EDI=0x00001c6c, CS=0x00000033, SS=0x0000002b
### DS=0x00000000, ES=0x00000000, FS=0x00000000, GS=0x00000000 Flags=0x1700000246
############################################################
 [ 1] 0x7FFFC6DD5AC4 ntdll.ZwWaitForSingleObject+20 (10,0,0,F3AC3F6300)
 [ 2] 0x7FFFC3464ABF KERNELBASE.WaitForSingleObjectEx+143 (10,F3AC3F69B0,7FFF00000000,1c6c)
@[ 3] 0x7FFFB326DAD0 nnotes.OSRunExternalScript+1808 (5,0,424,0)
@[ 4] 0x7FFFB3269E9C nnotes.FRTerminateWindowsResources+1532 (5,23B45D80D50,0,1)
@[ 5] 0x7FFFB326BA23 nnotes.OSFaultCleanupExt+1395 (0,7f60,0,F3AC3F7C70)
@[ 6] 0x7FFFB326B4A7 nnotes.OSFaultCleanup+23 (7f60,7FFFB3DE7E30,0,200000000)
@[ 7] 0x7FFFB32D6D76 nnotes.OSNTUnhandledExceptionFilter+390 (F3AC3F7B50,7FFFB485A818,F3AC3F7C70,FFFFEB865BDB003)
@[ 8] 0x7FFFB326E70A nnotes.Panic+1066 (5dc,125851500347E41,7FF786A7B4A0,23B1D91F9A8)
@[ 9] 0x7FFFB329FDD6 nnotes.OSLockSemInt+70 (23B1D91F9A4,145c,7FF786A84578,7FF786A84578)
@[10] 0x7FFFB32A04ED nnotes.OSLockWriteSem+77 (23B1D92AA18,7FF786A84578,23B14EA41B0,7FF786A84578)
@[11] 0x7FFFAC74DDC1 nlsxbe.ANDatabase::ANDRemoveCalendar+33 (23B1D92AA18,7FF786A84578,0,23B18FFCBA8)
@[12] 0x7FFFAC881CBB nlsxbe.ANCalendar::`scalar deleting destructor'+91 (7FF786A84578,23B1BB6FC78,0,1)
@[13] 0x7FFFAC7FFAF7 nlsxbe.Java_lotus_domino_local_NotesBase_RecycleObject2+471 (23B159C7A00,23B1BB6FC78,23B1BB6FC70,0)
@[14] 0x7FFFAC7FF91A nlsxbe.Java_lotus_domino_local_NotesBase_RecycleObject+42 (23B159C7A00,23B1BB6FC78,23B1BB6FC70,23B159C7A00)