最近项目遇到一个棘手问题,因为导致问题的原因很难找到,而且很难重现问题。
当未知问题根源时,原因就会有很多,比如:
-
服务器环境配置
-
代码
-
产品BUG
而且也已经向产品组反馈,没有得到有效帮助,只能继续追查环境配置和代码。
问题是这样的,在提交单据时,用户界面报错,查看详细信息,提示CommunicationException
No sandboxworker process are currently available.
我们尝试使用多线程来创建案例记录,提高了问题重现的概率。
经过近近一个月的追查,发现一个部署配置项SandboxHostMaxWorkerProcesses,在DeploymentSettings表里面可以找到。
系统已经配置非常多流程,而且所有插件和工作流都是注册在沙盒模式的。
在我们这个case中,监控案例(incident)实体的工作流有38个,一旦案例状态发生变化,就会触发工作流,沙盒进程消耗的资源与工作流(异步服务需要与沙盒服务通讯)和插件个数成正相关。
后来经过摸索,把SandboxHostMaxWorkerProcesses配置设置为比较小的值,看是否会提高问题重现概率,问题重现的概率降低,几乎没有再发现此问题,欢迎各路大神指出根因。
在日积月累的实践中发现并找到根因,找出真相,并解决问题,能够让你感到兴奋!
昨天,我又遇到了类似的错误关键字:No sandbox hosts are currently avaliable
在一次别人需要我解决一个问题
原始问题是这样的:
一个异步插件没有执行,也看不到流程执行记录。
目标环境的部署架构是这样的:两台后端服务器,其中一台沙盒,另一台是异步服务器。
检查步骤:
1.首先检查的是异步服务器里面的“”Microsoft Dynamics 异步服务“”是否有启动(发现没有启动,设为自动,重启也没有自动启动,手动启动成功)。
2.启动异步服务后问题依然存在,然后使用trace打日志,发现日志也没有记录,因为流程没有启动。
3.登录异步服务器,查看事件日志(应用程序)。发现有异步服务的错误,CommunicationException,是通讯错误,错误详细中包含字样“No sandbox hosts are currently avaliable”。
4.检查异步服务器是否能够ping通前端,沙盒服务器,检查异步服务器的域名,dns配置、防火墙等,都发现没有问题。
在经历探索联想之后,我首先想到的是:异步服务器需要与沙盒服务器通讯,再看看事件日志发现,异步服务器能够ping通却无法访问沙盒服务,所以怀疑SPN出了问题。
SPN,全称是Service Principle Name ,服务器主体名称 。
如果在域用户帐户下运行服务,则必须为要使用的帐户手动注册SPN
因为沙盒服务是使用域账号来登录的,所以需要检查SPN是否有正确注册。
使用PowerShell 输入命令检查沙盒服务启动账户下,是否有注册SPN:
setspn -L {HostName} {Domain/AccountName} --HostName:代表沙盒服务器主机名; Domain/AccountName代表域账号
发现其中一个SPN注册错误,域名错了,使用以下命令删除错误的注册:
setspn -d ServiceClass/Host : Port AccountName --ServiceClass:指服务名,HOST:主机名
然而,问题依然存在,还是没好!这是,我还是很淡定,因为问题存在很正常,而越有挑战性的问题,解决它也是一件让人欣喜的事。
还是按照异步服务器没法访问沙盒服务器的线索来找答案。
有哪些方法可以测试无法访问服务呢?如果没有一点点发散性思维,还真无法继续下去解决问题了。
thinkpoint:
1. SPN是完整的服务名/域名,
2.看过一个同事使用nslookup来解析主机,输入主机名,能够看到IP和FQDN(Fully Qualified Domain Name)。
于是使用nslookup这个命令输入沙盒服务器的主机名看看,发现确实不能够解析出来。
难道沙盒服务器的配置有问题?SPN还有问题?经过确认SPN是没有问题的。
线索在哪里呢?既然前端能够执行同步插件,而不能执行异步任务,说明,前端可以访问沙盒服务器,印证了沙盒服务器配置没有问题,问题是出在了异步服务器里。
这个真相大查找的过程还真是让人刺激。
异步服务器出了什么问题?
无法访问其他机器?也不是,只是无法访问其他机器的服务。
那是为什么?我就想,既然服务要注册SPN,一个包含域名的名称,所以,访问服务也是需要包含域名的一个完整地址咯?确实是的。
因此,既然使用nslookup命令,无法解析出沙盒服务器,那应该是跟DNS配置有关。检查异步服务器的DNS配置,咋一看没问题,DNS服务器没问题,IP是正确的,但是细看发现,问题出在这里
DNS后缀注册的时候少了个子域,应为xxx.mycompany.com,因为最底下的选项,使用这些错误的DNS后缀,导致无法访问其他服务器的服务。
真相大白!也成功解决了问题!刺激!爽!
希望对遇到相同问题的网友有帮助。
如有问题或说得不对的地方,欢迎指正、交流。cheng32@sina.com