測試環境:
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太快了呢?