文档章节

Java Tomcat vs PHP CLI Server 性能对比

eechen
 eechen
发布于 2014/09/22 10:05
字数 605
阅读 4852
收藏 32
测试环境:
Ubuntu 14.04 with i5-3230M
Tomcat 8.0.5 with 64bit jre1.7.0_55
PHP 5.5.8 with Zend OPcache v7.0.3-dev

测试脚本: 显示当前服务器时间
Java Tomcat: t.jsp
<%@ page session="false" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>JSP测试</title>
    </head>
    <body>
	<% java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); %>
	<%=sdf.format(new java.util.Date()) %>
    </body>
</html>


PHP CLI Server: t.php
<?php header('Content-Type: text/html;charset=UTF-8'); ?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>PHP测试</title>
    </head>
    <body>
	<?php echo date('Y-m-d H:i:s'); ?>
    </body>
</html>


taskset -pc 1 `pgrep java` 将Java进程绑定到CPU1
taskset -p `pgrep java` 查看绑定后的CPU使用情况

taskset -c 1 php -S 127.0.0.1:8081 -t /png/www/ 将PHP进程绑定到CPU1并启动
taskset -p `pgrep php` 查看绑定后的CPU使用情况

先热一下身:
curl -I http://127.0.0.1:8080/t.jsp
curl -I http://127.0.0.1:8081/t.php

将siege绑定到CPU0,并发100,持续10秒,压测Java Tomcat:
taskset -c 0 siege -c100 -t10S http://127.0.0.1:8080/t.jsp


Java Tomcat 压测时Java进程的CPU使用率(%CPU):
pidstat -p `pidof java` 1


Java Tomcat 压测时系统的CPU空闲率(%idle):
sar 1


将siege绑定到CPU0,并发100,持续10秒,压测PHP CLI Server:
taskset -c 0 siege -c100 -t10S http://127.0.0.1:8081/t.php


PHP CLI Server 压测时PHP进程的CPU使用率(%CPU):
pidstat -p `pidof php` 1


PHP CLI Server 压测时系统的CPU空闲率(%idle):
sar 1


Java Tomcat vs PHP CLI Server 测试数据对比:

Java Tomcat
PHP CLI Server
测试前内存占用(MB)
93.4
20.0
测试后内存占用(MB)
185.2
20.5
进程CPU使用率(%CPU,越小越好,i5-3230M满载时为400%)
约300%
约95%
系统CPU空闲率(%idle,越大越好,完全空闲时为100%)
约7%
约46%
每秒处理请求数(Transaction rate,越大越好)
5376
6878

说明:

i5-3230M双核四线程,%CPU最大值可达到400%.

PHP从5.4.0开始内建了一个Web Server,方便PHPer测试和开发,Linux上是一个单线程应用,所以PHP进程的CPU使用率始终在100%以下.
而Tomcat是一个多线程Java应用,CPU耗得非常厉害,高峰时甚至超高330%!

PHP测试后内存仅仅涨了0.5MB,而Java进程内存涨了1倍,内存波动非常大,达到180多MB,是PHP内存占用的9倍还多!

PHP CLI Server的每秒处理请求数要比Java Tomcat多了 1500,而内存和CPU占用却比Java Tomcat小得多,是Java太低能了呢,还是PHP太快了呢?

© 著作权归作者所有

eechen

eechen

粉丝 1026
博文 107
码字总数 55962
作品 1
深圳
私信 提问
加载中

评论(34)

passkey
passkey

引用来自“天天笑笑”的评论

这种比较毫无意义
那什么有意义,喷有意义是吗
梁选
梁选

引用来自“huige_yang”的评论

可以比安全性吗?

引用来自“eechen”的评论

怎么比?应用的安全性在于编程人员而不是语言。淘宝也在用PHP,你去黑它? http://list.tmall.com/search_product.php?q=lenovo
lenove
梁选
梁选

引用来自“keyganker”的评论

不是说servlet比cgi高效么。。。看来是老文章害死人哦

引用来自“eechen”的评论

PHP CLI Server只是PHP内建的一个用来测试和开发的服务器,跟CGI没有关系,是一个cli的SAPI应用。

引用来自“keyganker”的评论

哦,是我马虎了。那这个比较没啥意义啊,生产环境不会用这个server。 应该跟apache/nginx+fastcgi比较一下

引用来自“eechen”的评论

我用PHP CLI Server测试就是为了不想引入Apache和Nginx的干扰,就是纯PHP和Java的对K。

引用来自“南湖船老大”的评论

我也是醉了。。当别人不懂PHP么。。这叫对K?这明明是裸PHP和完整的Java webserver比较。有这么偷换概念的?
好像没错,是纯php和java,不是纯php和纯java
天天笑笑
天天笑笑
这种比较毫无意义
帖子列表
帖子列表
也就是说不做http的应用的话,php性能贼强悍咯
eechen
eechen 博主

引用来自“水牛叔叔”的评论

资深php粉,哈哈,我就不纠结这点性能了
我测的是10秒,如果测的时间长一点,Java触发JIT HotSpot热点编译后Tomcat消耗的CPU就不会那么多了,最后稳定在175%左右.这篇测试主要是回应那些PHP黑而已.
水牛叔叔
水牛叔叔
我是说博主php粉,我不是哈
水牛叔叔
水牛叔叔
资深php粉,哈哈,我就不纠结这点性能了
eechen
eechen 博主

引用来自“huige_yang”的评论

可以比安全性吗?
怎么比?应用的安全性在于编程人员而不是语言。淘宝也在用PHP,你去黑它? http://list.tmall.com/search_product.php?q=lenovo
淮南一梦
淮南一梦
可以比安全性吗?
Tomcat vs Apache

Tomcat vs Apache:您钟情于哪一款 本文探讨了 Apache 与 Apache Tomcat 之间的区别,帮助开发者选择更加适宜的Web服务器。 当你选择使用哪种Web服务器时,或许会因它们的差异性和技术细节等...

长平狐
2013/01/06
316
0
JAVA企业级应用TOMCAT实战

精彩视频讲解,请猛戳–>JAVA企业级应用TOMCAT实战视频课程 1. Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一...

想飞的鱼8
2018/06/26
0
0
JVM client模式和Server模式的区别

这里向大家描述一下JVM client模式和Server模式两者的区别和联系,JVM如果不显式指定是-Server模式还是-client模式,JVM能够根据下列原则进行自动判断(适用于Java5版本或者Java以上版本)。...

SeanCai
2014/04/12
308
0
sqoop2基本架构、部署和个人使用感受

一、概述 随着公司集群升级到2.x,hadoop周边的一些工具也进行了版本的更新。这次主要说说sqoop2的升级和部署,其中sqoop1和sqoop2基本框架和用法发生翻天覆地的改变,其对版本的向下兼容做的...

zengzhaozheng
2018/07/02
0
0
借《淺談PHP與Java之Web開發整合技術》说LAJP

这是早先在网上流传的一篇PHP与Java相结合的技术文章,其中列举了三种整合技术:SOAP、 Quercus、PHP/Java Bridge,这对理解并使用LAJP框架有很好的参考作用,因此将原文摘录在此,并在后面作...

刁忆飞
2010/06/03
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

利用CSS禁止手机长按出现气泡: 复制、选择等功能

可以用 * ,也可作用于一个div div{  -webkit-touch-callout:none;  /*系统默认菜单被禁用*/  -webkit-user-select:none; /*webkit浏览器*/  -khtml-user-select:none; /*早期浏览...

蓝小驴
52分钟前
9
0
前端的一些雕虫小技,从100%和滚动条说起

1、100%和滚动条 当我们在css中把html和body同时设为100%时,会出现滚动条 html, body { width: 100%; height: 100%; } 原因是html和b...

wphmoon
今天
8
0
电力区块链应用案例【2019】

随着区块链技术的日益普及,出现了大量创业企业尝试使用区块链技术来解决能源与电力行业中存在的问题。在本文中,我们将介绍其中的三个能源区块链项目。 能源行业以价格不透明著称:消费者很...

汇智网教程
今天
12
0
聊聊rocketmq的adjustThreadPoolNumsThreshold

序 本文主要研究一下rocketmq的adjustThreadPoolNumsThreshold DefaultMQPushConsumer rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/consumer/DefaultMQPushConsumer.ja......

go4it
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部