zoukankan      html  css  js  c++  java
  • No sandboxworker process or sandbox hosts are currently avaliable

    最近项目遇到一个棘手问题,因为导致问题的原因很难找到,而且很难重现问题。

    当未知问题根源时,原因就会有很多,比如:

    1. 服务器环境配置
    2. 代码
    3. 产品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

  • 相关阅读:
    SpringMVC中静态获取request对象 Spring中获取 HttpServletRequest对象【转载】
    springcloud 的loadbalancer 轮询算法切换方法 2021.4.3
    springboot项目启动增加图标
    rabbitmq 端口作用以及修改方法
    centos8 安装rabbitmq
    springcloud config client Value获取不到信息的问题的处理方法
    springcloud config配置git作为数据源然后启动报错 If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    Sublime Text的列模式如何操作
    centos8 安装redis
    jQuery简单的Ajax调用
  • 原文地址:https://www.cnblogs.com/tcli/p/6931614.html
Copyright © 2011-2022 走看看