我有一个计划脚本,可以在销售订单上进行一些计算和更新自定义标题字段,每30分钟运行一次。
随着Netsuite中订单数量的增加,我开始收到错误消息“已发生意外错误”
执行时间:677.15秒 脚本用法:75 错误:SSS_INSTRUCTION_COUNT_EXCEEDED” 超出脚本执行指令计数。 堆栈跟踪:预定
请帮我摆脱这个错误。
p.s:上述问题没有套件答案。
答案 0 :(得分:4)
NetSuite已经建立了内部机制来检测包含无限循环的“失控脚本”。一旦捕获,这些脚本将被终止并抛出SSS_INSTRUCTION_COUNT_EXCEEDED错误消息。如果您收到此错误,NetSuite建议您检查脚本中的for循环,以确保它们包含终止条件或可以满足的条件。
您也可以考虑以下几点
NetSuite管理使用
nlapiLogExecution(type, title, details)
治理模型旨在防止不合理的过度日志记录,这会对共享同一数据库的其他NetSuite客户的性能产生负面影响。治理模型并不意味着影响正确使用nlapiLogExecution()
的公司(或脚本)。
治理模型如下:
在60分钟的时间内,公司可以在所有脚本中拨打最多100,000个nlapiLogExecution()电话。
如果在60分钟的时间内NetSuite检测到某个给定的脚本过度记录(并推动公司接近100,000 nlapiLogExecution()呼叫限制),NetSuite会将违规脚本的日志级别更改为下一级别更高。违规脚本将继续执行,但是,其日志级别将从Debug调试到Audit,或Audit to Error,或Error to Emergency,具体取决于脚本。
脚本执行日志的容量由同一数据库上的客户共享。为了进一步防止过度日志记录,脚本执行日志由NetSuite数据库的每个实例上的总存储限制来控制。在每个NetSuite服务器上,如果存储日志的数据库表达到此限制,则会清除所有日志(该服务器上的所有客户)。因此,NetSuite建议您使用自定义记录存储信息。
ABC公司在60分钟内运行了10个脚本。如果10个脚本中有一个调用
nlapiLogExecution('DEBUG', 'My log', x.getID())
在20分钟的时间内完成70,000次,NetSuite将提高脚本的日志级别。
日志级别的更改将显示在脚本的“脚本部署”页面上的“日志级别”字段中(参见图)。在下图中,如果违规脚本的日志级别最初设置为Debug,NetSuite会将日志级别增加到Audit。这意味着读取的代码行
nlapiLogExecution('DEBUG', 'My log', x.getID())
将继续执行,但不会记录任何内容,因为脚本的日志级别已提升为Audit。
如果NetSuite检测到一个脚本过度记录,则会通知脚本的所有者。脚本所有者会收到警告,该脚本是他或她公司的主要贡献者,可能超过100,000个记录阈值(给定的60分钟时间段)。
NetSuite通过电子邮件发送通知,并在脚本的执行日志中添加日志条目。电子邮件和NetSuite生成的日志都会警告脚本所有者脚本的日志级别已经增加。
参考:Netsuite Help Center [脚本记录治理]
答案 1 :(得分:4)
NetSuite中没有适当的文档说明允许的脚本行数。正如@rockstar所说
NetSuite已经建立了内部机制来检测“失控” 脚本“包括无限循环
我遇到了同样的错误,即使没有任何无限循环。
您应该采取的第一种方法是尝试通过减少循环次数或不必要的脚本语句来优化脚本。
如果这不可能或仍然没有帮助,您可以在处理一定数量的数据后yield
脚本以重置脚本语句使用的使用。
答案 2 :(得分:1)
如果循环中有一些需要很长时间才能完成的逻辑,我通常会收到此错误。另一个常见原因是无限循环。