javascript Netsuite中出现脚本执行指令计数超出错误

svdrlsy4  于 2022-12-17  发布在  Java
关注(0)|答案(4)|浏览(151)

我有一个调度脚本,它做一些计算和更新自定义标题字段上的销售订单,每30分钟运行一次。
随着Netsuite中订单数量的增加,我开始收到错误消息,称“发生意外错误”
执行时间:677.15s脚本用法:75错误:SSS_INSTRUCTION_COUNT_EXCEEDED”超出脚本执行指令计数。堆栈跟踪:预定的
请帮我改正这个错误。
注:上述问题无合适答案。

6mzjoqzu

6mzjoqzu1#

NetSuite中没有适当的文档来说明允许的脚本行数。
NetSuite已经建立了内部机制来检测包含无限循环的“失控脚本
我遇到了同样的错误,尽管没有任何无限循环。
第一种方法是通过减少循环或不必要的脚本语句来优化脚本。
如果这不可能或仍然没有帮助,您可以在处理一定数量的数据后yield您的脚本,以重置脚本语句的用法。

y1aodyip

y1aodyip2#

NetSuite已经建立了内部机制来检测包含无限循环的“失控脚本”。一旦捕获,这些脚本将被终止,并引发SSS_INSTRUCTION_COUNT_EXCEEDED错误消息。如果收到此错误,NetSuite建议您检查脚本中的for循环,以确保它们包含终止条件或可以满足的条件。
您可能还需要考虑以下几点
NetSuite控制nlapiLogExecution(type, title, details)的使用
治理模型旨在防止不合理的过度日志记录,这可能会对共享同一数据库的其他NetSuite客户的性能产生负面影响。治理模型并不旨在影响正确使用nlapiLogExecution()的公司(或脚本)。

管理模式如下:

在60分钟的时间段内,允许公司在其所有脚本中对nlapiLogExecution()进行多达100,000次调用。
如果NetSuite在60分钟内检测到给定脚本记录过多(并将公司推到接近100,000 nlapiLogExecution()调用限制),NetSuite会将违规脚本的日志级别更改为更高的级别。违规脚本将继续执行,但其日志级别将从“调试”更改为“审核”,或“审核”更改为“错误”,或“错误”更改为“紧急”。这取决于剧本。
脚本执行日志的容量由同一数据库上的客户共享。为了进一步防止过多的日志记录,脚本执行日志由NetSuite数据库的每个示例上的总存储限制控制。在每个NetSuite服务器上,如果存储日志的数据库表达到此限制,则所有日志(该服务器上的所有客户)。因此,NetSuite建议您使用自定义记录存储信息。

示例

ABC公司在60分钟内运行了10个脚本。如果10个脚本中有一个调用

nlapiLogExecution('DEBUG', 'My log', x.getID())

70,000次,仅在20分钟的时间内,NetSuite将提高脚本的日志级别。
日志级别的更改将显示在脚本的"脚本部署“页面上的”日志级别“字段中(见图)。在下图中,如果违规脚本的”日志级别“最初设置为”调试“,NetSuite将把日志级别提高到”审核“。这意味着代码行读取

nlapiLogExecution('DEBUG', 'My log', x.getID())

将继续执行,但不会记录任何内容,因为脚本的日志级别已提升为审核。

通知脚本所有者

如果NetSuite检测到某个脚本记录过多,则会通知该脚本的所有者。系统会提醒该脚本是其公司的主要贡献者,可能会超过100,000个日志记录阈值(在给定的60分钟时段内)。
NetSuite通过电子邮件发送通知,并将日志条目添加到脚本的执行日志中。电子邮件和NetSuite生成的日志都会提醒脚本所有者脚本的日志级别已提高。
参考:Netsuite Help Center [对脚本日志记录的治理]

jm2pwxwz

jm2pwxwz3#

如果我在一个循环中有一些逻辑需要很长时间才能完成,我通常会得到这个错误。另一个常见的原因是无限循环。

disho6za

disho6za4#

您还可以轻松地将其转换为MAP_REDUCE,这样就可以运行该脚本,而不必担心使用单位或指令单位,因为它的所有内容都是排队的,并且是为批量处理而设计的。帐户只会扩展得更大,因此我将采用这种方法,因为可以配置与计划脚本相同的执行参数,或者使用相同的脚本来使用N/task在你将MAP_REDUCE脚本的逻辑重构到MAP_REDUCE中之后,每30分钟调用一次MAP_REDUCE脚本。当你给这个脚本分配任务时,唯一的事情就是确保它在再次运行之前完成。然后你可以在MAP_REDUCE的摘要中建立一些关于这个的报告,这很有趣也很酷!🚀

相关问题