编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

beego Vs Springboot,Java与Golang的性能对决,谁能赢?

wxchong 2024-10-19 15:39:31 开源技术 17 ℃ 0 评论

作为目前最火的语言,Java已经显得老态龙忠了,听到最多的抱怨就是臃肿,性能低,开发部署麻烦,甚至连脚本语言PHP都携swoole想趁机打一驾,真的是这样的吗?

其实真正做过Java开发的是不可能说出 Java开发部署麻烦这种话的,maven引入,Springboot一把梭,面向对象的语法虽然繁琐但是贴近口语话,开发是一件很轻松的事情了。那么剩下的就是性能问题了。

作为明星的Golang语言最近几年风头大胜,大有打尽天下无敌手的姿态,速度快,占用内存小的优点。在国内,使用最多的go语言web框架就是beego了,其地位相当于PHP界的ThinkPHP框架,国产,功能丰富,易用。但是Java没有对应的国产框架与之对应,就选最流行的Springboot吧。

基本代码

硬件配置 :Thinkpad E480,4核8线程 i5-8 CPU,16G内存,SSD

先来看下SpringBoot的配置

 <dependencies>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
 <exclusions>
 <exclusion>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-tomcat</artifactId>
 </exclusion>
 <exclusion>
 <groupId>org.hibernate.validator</groupId>
 <artifactId>hibernate-validator</artifactId>
 </exclusion>
 </exclusions>
 </dependency>
 <dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-undertow</artifactId>
 </dependency>
 <dependency>
 <groupId>com.ibeetl</groupId>
 <artifactId>beetl-framework-starter</artifactId>
 <version>${beetl.version}</version>
 </dependency>
 </dependencies>

application.yml配置文件如下

# 开发环境配置
server:
 # 服务端口
 port: 8080
 servlet:
 # 项目contextPath
 context-path: /
 error:
 whitelabel:
 enabled: true
 undertow:
 worker-threads: 8
 io-threads: 4 #设置IO线程数, 它主要执行非阻塞的任务,它会负责多个连接,默认取CPU核心数量
 max-http-post-size: 50000000
 buffer-size: 512
 accesslog:
 enabled: false
beetl-beetlsql:
 dev: false
beetl:
 suffix: html
 delimiter-statement-start: '<!--:'
 delimiter-statement-end: '--\>'
 resource-tagsuffix: tag
 resource-auto-check: false #是否检测文件变化,开发用true合适,但线上要改为false
beetlsql:
 basePackage: spx

基本都是默认配置

这里只引入了server容器和一个叫beetl的模板引擎,其控制器代码如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * spring boot 类
 */
@RestController
public class HelloWorldController {
 protected Logger log = LoggerFactory.getLogger(this.getClass());
 @RequestMapping("/")
 String home() {
 //log.info("index...");
 return "Greetings from Spring Boot!";
 }
}

只打印一句话,并输出到页面。

beego使用官方的默认项目,控制器代码

package controllers
import (
 "github.com/astaxie/beego"
)
type MainController struct {
 beego.Controller
}
func (c *MainController) Get() {
 c.Ctx.WriteString("Greetings from Golang BeeGo")
}

压测Springboot

下面来压测下Springboot的性能,先预热一轮20秒,取第二轮120秒的成绩。

Springboot的启动未带任何JVM参数,未作其他优化,jinfo查看默认参数是

VM Flags:
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=262144000 -XX:MaxHeapSize=4177526784 -
XX:MaxNewSize=1392508928 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=87031808 -XX:OldSize=175112192 -XX:+
UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC

可以看到RPS大约是65000多,CPU占用45%,测试完后内存占用达到1.5G后保持稳定

压测Beego

接下来我们来压测Beego,也是先预热一轮20秒,取第二轮120秒的成绩

可以看到,两轮压测后beego的RPS是45000多,CPU占用41%,内存13M

结论:

1.在默认配置下,springboot和beego的RPS没有显著差距,springboot略优于Beego框架。实际上在后面的测试中,当输出的内容更多时,springboot性能优势更明显。

2.beego的内存占用仅为13M,远小于springboot的1.5G,可见golang的内存优势确实非常明显。

3.两者在使用上成本差不多,都比较容易上手

4.本测试不够严谨,仅仅是抛砖引玉,粗窥门径。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表