php – 简单页面上的高负载平均zf2原则
我使用ZendFramework2和Doctrine来启动我的项目.我的CPU在httpd请求上显示高使用率.我启用了用于文件缓存的opcache,以及Doctrine的memcache.
任何想法为什么它的负载平均值接近5.0?我把die(‘test1’)放在ZendFramework2的onBootstrap里面一次,另一次我把它(‘test’)放在了之前. die('test2') ZendMvcApplication::init(require 'config/application.config.php')->run(); 我的Apache工作台显示,当框架加载时没有任何连接到数据库或去任何控制器,它的速度要慢5倍.为什么zf2这样做,可能是一个可行的解决方案来规范它的行为? [问题更新] 我用Xdebug和Webgrind进行了剖析,发现进程如bootstrap占比很高
在引导我有这行代码 //... $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); //... 另一个高点就是
如果您的系统适用于50个用户,但不是100个.那么您可能在您的系统中有瓶颈.当它通过50个用户的阈值时,它可能会耗尽某些资源,导致负载迅速上升.
在线之间读取,您正在使用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 "....modulesMODULENAME" 例如 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( 'ZendLoaderClassMapAutoloader' => array( __DIR__ . '/autoload_classmap.php',),'ZendLoaderStandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,); } 这通知Zend如何搜索文件以包含和跳过猜测部分.在您的基准测试中应该明显更快. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |