小编PvB*_*PvB的帖子

PHP如何使用超过100%的CPU?

在第三方虚拟服务器上检查客户端的应用程序时,我注意到一个有趣的现象:单个PHP进程似乎使用多个核心.据我所知,PHP无法做到这一点.

行为描述
以下是处理对Web应用程序的单个请求时htop的输出: 输出htop
htop的输出,绿色是用户cpu,红色是系统cpu

所有四个核心都是100%,只有一个PHP进程在396%CPU和内存使用率低.
我已经使用strace或pidstat调查了高系统cpu,但是找不到任何IO问题.

服务器信息
虚拟服务器是Debain LAMP环境,使用英特尔的VT-X虚拟化和Virtuozzo,提供4个560 MHz核心:

lscpu的输出
lscpu

输出服务器在apache 2.4.7(prefork)服务的快速CGI中运行PHP 5.5.9.Nginx 1.9.4用作崇拜代理,Plesk 12.5用于配置服务器.

示例PHP代码(EDIT)
为了排除应用程序代码作为源我使用一段简单的代码确认了行为:

$array = array('z', 'y', 'x', 'h', 'd', 's', 'w', 'q', 'a');
for ($i=0; $i < 9999999; $i++) {
    sort($array); // Delaying execution
}
echo 'loop ended';
Run Code Online (Sandbox Code Playgroud)

两个或多个PHP进程(EDIT) 如果同时处理两个或多个请求,则每个进程在尽可能多的内核上运行(2个进程=>每个进程2个内核,3个进程=> 1.33个内核).

问题

  • PHP可以同时使用多个核心吗?
  • 这可能与虚拟化有关吗?
  • 后续行动:系统CPU使用占主导地位的原因是什么?

php virtualization virtuozzo

8
推荐指数
1
解决办法
1069
查看次数

如何在Zend Framework中进行preDispatch转发?

我想用_forward()preDispatch当用户在每个控制器登录后检查.

方案很简单:如果用户未登录,则应将其转发到loginAction同一控制器或另一个控制器中.

这会导致无限循环,因为调度过程重新开始,再次调用preDispatch,转发将再次启动所有内容.

我能想出的唯一解决方案是检查是否loginAction已在请求中设置.

所以我的问题是,复杂的开发人员将如何处理这个问题?

更新 刚刚点击发送按钮后,神圣意识的幽灵就出现了;)另一个想法是建立一个LoginController处理登录请求.还是有更好的方法?

php zend-framework controller forwarding dispatcher

2
推荐指数
1
解决办法
1万
查看次数

如何在Zend Framework中获取奇数个参数?

大家问候

使用该request对象,我无法获得此URI中的唯一值:

http://mydomain.com/controller/action/value1
Run Code Online (Sandbox Code Playgroud)

使用$request->getParams()不返回value1.

输出:

array([controller] => 'controller', [action] => 'action')
Run Code Online (Sandbox Code Playgroud)

关键是缺失.

问题本身很简单,我可以自己解析URI,但实际上我想让ZF这样做(对吧?).我找不到使用谷歌或SO的提示.

如何在没有值的情况下获得密钥?

php parameters parsing uri zend-framework

1
推荐指数
1
解决办法
271
查看次数