任何想法为什么它的负载平均值接近5.0?我把die(‘test1’)放在ZendFramework2的onBootstrap里面一次,另一次我把它(‘test’)放在了之前.
die('test2') Zend\Mvc\Application::init(require 'config/application.config.PHP')->run();
我的Apache工作台显示,当框架加载时没有任何连接到数据库或去任何控制器,它的速度要慢5倍.为什么zf2这样做,可能是一个可行的解决方案来规范它的行为?
[问题更新]
我用Xdebug和Webgrind进行了剖析,发现进程如bootstrap占比很高
( Application\Module->onBootstrap)
在引导我有这行代码
//... $eventManager->attach(MvcEvent::EVENT_ROUTE,function($e) use ($blacklistForNormalUser,$auth) { $match = $e->getRouteMatch(); // No route match,this is a 404 if (!$match instanceof RouteMatch) { return; } // Route is whitelisted $name = $match->getMatchedRouteName(); if (!in_array($name,$blacklistForNormalUser) ) { return; } // User is authenticated if ($auth->hasIdentity() ) { return; } // Redirect to the user login page,as an example $router = $e->getRouter(); if(in_array($name,$blacklistForNormalUser)){ $url = $router->assemble(array(),array( 'name' => 'user/login' )); } $response = $e->getResponse(); $response->getHeaders()->addHeaderLine('Location',$url); $response->setStatusCode(302); return $response; },-100); //...
另一个高点就是
Doctrine\ORM\Mapping\Driver\AnnotationDriver->loadMetadataForClass
在线之间读取,您正在使用LAMP堆栈.有用的命令是:
top
这给你很多信息很快.查看顶部行可以在cpu行中看到处理器花费的时间.非常高的%wa可能意味着从数据库等待磁盘IO.
看看Mem:和Swap:行,检查你的交换在低和高负载.如果它已经显着上升,那么这可能意味着你的系统内存不足.调整您的应用程序或添加更多的RAM.
看看运行的任务,顶部显示什么? httpd,也许MysqL或其他一些工具像备份一样运行并造成破坏.
尝试学习阅读系统中的信息.还有许多其他命令,如’free -m’或’vmstat -n 5′,可能值得一看.
如果没有任何帮助,那么可能有帮助的几个Apache工具是mod_status这将显示Apache在任何给定时间处理的请求.另外在apache中添加%msT到您的commonlog配置选项将使其记录为每个请求提供服务所需的时间,然后可以在日志中查找任何非常慢的脚本.
毕竟,如果它仍然没有意义或全部.回到另一个问题,并添加更多关于您的系统的细节.
………………..
感谢您添加额外的细节和良好的工作与webgrind.代码的排列有很多可能会导致速度减慢,但最好从一些基本的ZF2调整开始,这是一个有用的技巧.
默认情况下,让ZF2做很多工作查找和查看文件.这会使ZF2下降很多,因为它必须在每个请求上找到它们.由于相同的原因,使用绝对路径名的文件未加载时,Opcache的效果也不太好.
ZF2有一个工具来帮助在供应商/ bin中生成类和文件位置的列表.对于应用程序文件夹中的每个模块.
PHP classmap_generator.PHP -l "..\..\modules\MODULENAME"
例如
PHP classmap_generator.PHP -l ../../module/Application Creating class file map for library in '/zend/module/Application'... Wrote classmap file to '/zend/module/Application/autoload_classmap.PHP'
确保通过向Module.PHP文件添加类似的类来使用类映射:
public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( __DIR__ . '/autoload_classmap.PHP',),'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,); }