PHP Soap Client调用CPU使用率

时间:2013-03-08 13:58:52

标签: php performance web-services zend-framework soap

我几个月来一直在努力解决这个问题,所以我决定寻求帮助。在我们当前的项目中,我们使用多个Web服务与外部服务器进行通信。其中一个处理大量数据,肥皂调用需要很长时间。一些方法调用最多需要5-10秒。

我们可以处理这样的时间,问题出在其他地方。我们使用非常强大的机器来托管我们的应用程序(专用,6个氙处理器,16 GB RAM内存)。当我们调用外部WS并且服务器侦听响应时,CPU使用率峰值很大。

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

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

我很感激如何优化这一点。 提前谢谢

编辑:

  1. 部分代码 - 我完全忘了我们已经实现了修改,用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__));
    }
    
  2. 方法调用:

    $result = $this->client->$methodName($params);
    

    基本上这是一个简单的Soap Call。当脚本等待远程服务器提供服务时,会出现CPU使用率峰值。

    1. Web服务器托管在.NET WCF服务上。我们的客户端应用程序托管在PHP上(在Apache和IIS上测试)。
    2. 不,我没有使用过任何调试工具。以上所有评论均基于我们的日志和性能监控。
    3. 是的,WSDL中有几个导入。
    4. 关于第二个想法 - 关于大量数据的部分可能会误导。我们收到的数据不会延长50 KB。而且,花费最长时间的操作不会返回大量数据,而是Web服务器处理时间的问题。

0 个答案:

没有答案
相关问题