PHP Soap客户端调用CPU使用率

PHP Soap客户端调用CPU使用率,php,performance,web-services,zend-framework,soap,Php,Performance,Web Services,Zend Framework,Soap,我为这个问题挣扎了几个月,所以我决定寻求帮助。在我们当前的项目中,我们使用几个Web服务与外部服务器通信。其中一个处理大量数据,soap调用需要相当长的时间。有些方法调用最多需要5-10秒 我们可以在这样的时候处理,问题出在别处。我们使用非常强大的机器来承载我们的应用程序(专用的、6个氙气处理器、16 gb ram内存)。当我们调用外部WS,服务器监听响应时,CPU使用峰值是巨大的 我已经在一些较弱的机器上进行了测试,看起来这样的进程可以使用高达100%的单核使用率,这显然会极大地影响性能 我们

我为这个问题挣扎了几个月,所以我决定寻求帮助。在我们当前的项目中,我们使用几个Web服务与外部服务器通信。其中一个处理大量数据,soap调用需要相当长的时间。有些方法调用最多需要5-10秒

我们可以在这样的时候处理,问题出在别处。我们使用非常强大的机器来承载我们的应用程序(专用的、6个氙气处理器、16 gb ram内存)。当我们调用外部WS,服务器监听响应时,CPU使用峰值是巨大的

我已经在一些较弱的机器上进行了测试,看起来这样的进程可以使用高达100%的单核使用率,这显然会极大地影响性能

我们的应用程序基于PHP Zend框架(版本1)。作为Soap客户端,我们使用Zend_Soap_客户端

我很感激任何关于如何优化这一点的建议。 先谢谢你

编辑:

  • 代码的一部分——我完全忘记了我们已经实现了修改,用Curl替换了php SoapClient请求来处理超时(尽管这两种方法都存在问题)。这是我们客户的一部分:

    try {
    
    $this->client = new SoapExt_Client($this->config->wsdl,
                  array(
                      'cache_wsdl' => WSDL_CACHE_BOTH,
                      'encoding' => $this->config->encoding,
                      'soap_version' => SOAP_1_1,
                      'classmap' => array(
                          [...]
                      ),
                      'features' => SOAP_SINGLE_ELEMENT_ARRAYS
                  )
    );
     $this->client->__setTimeout((int) $this->config->timeout);
    } catch (Exception $exc) {
    throw new My_Exception_System(My_Codes::ERROR_WS_CONNECTION_FAILED, array(__CLASS__));
    }
    
  • 和方法调用:

    $result = $this->client->$methodName($params);
    
    所以基本上这是一个简单的Soap调用。当脚本等待远程服务器重新部署时,CPU使用率会出现峰值

  • Web服务器托管在.NET WCF服务上。我们的客户端应用程序托管在PHP上(在Apache和IIS上测试)
  • 没有,我没有使用任何调试工具。以上所有评论均基于我们的日志和性能监控
  • 是的,WSDL中有几个导入
  • 再想一想,关于大量数据的部分可能是错误的。我们收到的数据没有扩展到50 KB。此外,耗时最长的操作不会返回大量数据,而是Web服务器的处理时间问题
    不幸的是,如果无法访问产生使用率峰值的代码,就没有什么可以告诉您的了。什么Web服务器?记住PHP不是多线程的,不能利用额外的内核。任何一个php请求都不能使用多个核心。您是否使用类似xdebug的东西对其进行了分析?您是否使用带有xs:import的WSDL?有一个错误会导致无休止的循环。Ty如需评论,将尽快更新我的问题,并提供一些其他详细信息。