PHP和Java性能压测验证

最近在思考建立一个新项目的时候,对语言和框架选择要要怎么考虑。我想,对于技能娴熟、人数较少的团队,并且预期不会做的得很复杂的项目,快速开发会作为主要参考标准;对于技能不娴熟、人数较多的项目,或者预期会做得很复杂的项目,我觉得规范规整是主要考虑条件,因为对于不娴熟的程序员,或者对于业务复杂的大项目,可能要规整到每一条sql语句和每一行代码,那么不能过度封装。

说了这么多跟性能无关的,那让我们来看下一下性能。作为一个从PHP转Java的程序员,我想测一下两种语言在性能上的差异。不排除一些不严谨,测试结果有不准确的可能性。

服务器配置

2核4G Ubuntu

测试工具

JMeter

测试1

测试简单接口(只响应,啥都不干)的qps。预测:PHP接口CPU到达瓶颈,因为线程(JAVA)是比是进程(PHP)更轻量的单位,在线程中内存是可以共享的,而PHP要对每一次请求重新建立和销毁所有的对象,想想差别还是蛮大的。

java接口
    @RequestMapping(path="/testt")
    @ResponseBody
    public String testt(HttpServletRequest request, HttpServletResponse response) {
        return "ok";
        
    }
PHP接口
    public function testt(Request $request, LiveRecordService $service)
    {
        return "ok";
    }
测试结果
语言 每秒吞吐量 平均相应速度(ms) CPU使用程度
PHP 227 366 100%
Java 1175 78 50%
PHP 压测结果
Pasted Graphic 9.png
Java 压测结果
Pasted Graphic 8.png
PHP 服务器监控
Pasted Graphic 6.png
Java 服务器监控
Pasted Graphic 7.png

测试2

接口进行一次redis和MySQL主键查询,并返回查询数据。预期:由于Java配置了连接池,而PHP相应每个请求都建立Socket连接,三次握手,应该是有性能损失的,由于PHP已经瓶颈了,无法验证这个结论了,展示下测试结果吧。

java
    @RequestMapping(path="/testt")
    @ResponseBody
    public ResponseVO testt(HttpServletRequest request, HttpServletResponse response) {
        MallAdmins aa = mallAdminsService.getById(57);
        WxUsers bb = redisService.getObject("wxUserInfo:11", WxUsers.class);
        return ResponseVO.responseSuc(Lists.newArrayList(aa, bb));

    }

PHP
    public function testt(Request $request, LiveRecordService $service)
    {

        $aa = MallAdminModel::where("id", 57)->get();
        $bb = Redis::get("wxUserInfo:11");
        return LiveResponse::responseSuc([$aa, $bb]);
    }
测试结果
语言 每秒吞吐量 平均相应速度(ms) CPU使用程度
PHP 155 608 100%
Java 807 119 80%
PHP压测结果
image.png
Java 压测结果
image.png
PHP 服务器监控
Pasted Graphic 11.png
Java 服务器监控
Pasted Graphic 10.png

总结

符合预期。从实际角度上,我是遇到过接口瓶颈,但最后都发现是程序员有99%的提高空间,因为在系统设计上是程序有99%的改进空间,对于我做过的应用来说PHP的性能都是可以胜任的。但如果就这样否定性能的重要性,我想怕坐井观天。性能是可以用服务器堆的,但是如果是巨大而复杂的项目,服务器成本到最后我相信是指数级增加的。所以,我就保持这样的观点:性能,有比没有好。而对于快速开发这种定义,PHP的Larave框架真的是蛮好的,轮子齐全,PHP生态也还好,Spring的话,原生拿到手,开发是不快的。不过这些都不是问题,Spring也是可以极速开发的,如果哪天需要考虑规范规整,或者性能,那就是向下兼容。

你可能感兴趣的:(PHP和Java性能压测验证)