Nodejs与Tomcat压力测试性能比较,结果不明显啊

Nodejs与Tomcat压力测试性能比较,结果不明显啊

好纠结啊!自己顶起来

12 回复

当然可以!下面是一个关于Node.js与Tomcat在压力测试下的性能比较的详细分析,包括示例代码和测试结果。我们将会使用一些常见的工具来进行测试,比如Apache JMeter来模拟客户端请求。

Node.js 示例代码

首先,我们来看一下一个简单的Node.js服务器端代码:

// server.js (Node.js)
const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello World\n');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

Tomcat 示例代码

接下来,我们看一个简单的Tomcat应用(假设你已经有一个Tomcat服务器运行):

// HelloWorldServlet.java (Java Servlet)
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>Hello World!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

然后,你需要将这个Servlet添加到你的web.xml文件中:

<!-- web.xml -->
<web-app>
    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <servlet-class>HelloWorldServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

压力测试

为了进行压力测试,我们可以使用Apache JMeter。以下是一个简单的JMeter脚本配置步骤:

  1. 打开JMeter。
  2. 创建一个新的线程组。
  3. 在线程组中添加HTTP请求默认值(设置服务器地址和端口)。
  4. 添加HTTP请求(设置路径,例如//hello)。
  5. 配置线程数量、循环次数等参数。
  6. 运行测试并收集结果。

结果分析

在运行了压力测试之后,你可能会发现两者的表现有所不同,但差异可能并不显著,特别是在处理静态文本响应时。这主要是因为Node.js在处理并发请求时表现出色,而Tomcat在处理复杂的Java逻辑时可能更占优势。

如果你发现结果不明显,可能是因为测试场景过于简单。你可以尝试增加复杂度,例如通过引入数据库查询、复杂的计算逻辑等,这样可以更好地观察两种技术之间的性能差异。

希望这些信息对你有所帮助!


内存呢?node 小很多吧?

应该是8G,你看看参数,我贴出来了

难道没人测试过?都是一直在叫喊node性能高?没人动手测过?不是吧

目测该贴会变成笔记本性能帖。好吧,我认输,Core i5 Concurrency Level: 1000 Time taken for tests: 60.254 seconds Complete requests: 47000 Failed requests: 0 Write errors: 0 Total transferred: 7003000 bytes HTML transferred: 2303000 bytes Requests per second: 780.04 [#/sec] (mean) Time per request: 1281.993 [ms] (mean) Time per request: 1.282 [ms] (mean, across all concurrent requests) Transfer rate: 113.50 [Kbytes/sec] received

不过这种测试实际意义不大,底层和CPU过载都不一样。 libevent领先pthread一代,耗时上看不出,看CPU负荷就知道了。

-n1000 -c 1000 达不到并发的效果 并发是一种持续请求中同时请求的一种快照,至少-n 20000 再能看出点名堂

请赐教!说的具体点。。。

按照你的说去20000个请求去测试了。。 tomcat: Non-2xx responses: 20000 Total transferred: 23020000 bytes HTML transferred: 19640000 bytes Requests per second: 806.73 [#/sec] (mean) Time per request: 1239.571 [ms] (mean) Time per request: 1.240 [ms] (mean, across all concurrent requests) Transfer rate: 906.78 [Kbytes/sec] received

node: Concurrency Level: 1000 Time taken for tests: 20.382 seconds Complete requests: 20000 Failed requests: 0 Write errors: 0 Total transferred: 2240000 bytes HTML transferred: 220000 bytes Requests per second: 981.25 [#/sec] (mean) Time per request: 1019.108 [ms] (mean) Time per request: 1.019 [ms] (mean, across all concurrent requests) Transfer rate: 107.32 [Kbytes/sec] received

反倒不如tomcat了,作何解释。。。

那就是真实的情况,参考http://www.techempower.com/benchmarks/https://github.com/RestExpress/RestExpress/wiki/Echo-Benchmark-Results

各位同志们我知道什么情况了,测试的结果是对的,node确实是比javeEE的通吐量高20%,只有这么点,所以楼上的仁兄说的是对的,我之所以怀疑是因为很少有人用node和tomcat比的,很好有这方面的数据,网上的大都是很nginx+PHP, 或者python等比。 这里有个链接大家可以看看: http://www.csdn.net/article/2013-10-28/2817306-performance-comparison-between-node-and-javaee

总结下:个人认为tomcat7已经进行了很好的优化,所以性能也有明显提升,以至于差node也不是太多。不过至于我本地的生产环境,并发的峰值能达到多少没有测试出来,需要真实的生产环境测试才行。总是测试挺费劲,比起开发那是另外一种痛苦

在进行 Node.js 与 Tomcat 的压力测试时,如果发现性能比较结果不明显,可能是因为以下几个原因:

  1. 应用场景不同:Node.js 通常更适合处理高并发、轻量级的 I/O 密集型任务。而 Tomcat 更适合处理复杂的 Java 应用逻辑。选择合适的场景进行测试很重要。

  2. 代码优化问题:Node.js 和 Tomcat 的性能也依赖于具体实现的代码质量。如果代码没有很好地优化,可能会影响最终的测试结果。

  3. 测试工具的选择:使用不同的压力测试工具可能会得到不同的结果。确保你使用的是可靠的工具,并且配置正确。

  4. 资源限制:服务器的硬件资源(如 CPU、内存)也会影响性能测试的结果。确保测试环境有足够的资源。

为了帮助你更好地理解,以下是一些简单的示例代码,用于创建一个基本的 Node.js 应用和一个基本的 Tomcat 应用,你可以根据这些代码进行压力测试。

示例:Node.js 应用

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

示例:Tomcat 应用

创建一个简单的 index.jsp 文件放在 Tomcat 的 webapps/ROOT 目录下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Hello World</title></head>
<body>
<h1>Hello World!</h1>
</body>
</html>

然后启动 Tomcat 并访问 http://localhost:8080/index.jsp

压力测试工具

你可以使用 Apache JMeterwrk 进行压力测试。例如,使用 wrk 测试 Node.js 服务:

wrk -t4 -c100 -d30s http://127.0.0.1:3000/

使用 JMeter 进行测试时,确保正确配置线程组、循环次数等参数。

通过以上步骤,你可以更好地理解 Node.js 和 Tomcat 在不同场景下的性能表现。

回到顶部