Java,单机服务器如何充分利用服务器性能,达到最大并发量?

snailkky 发布于 03/25 15:03
阅读 854
收藏 1

23号当天12点一瞬间有大量的用户涌进来,具体多少人不好说,我看TCP链接是6千左右。

我的服务器配置如下:

数据库是使用阿里云的PolarDB,8核32GB,有读写分离,最大IOPS是64000,我查看过数据库相关压力,数据库几乎没有波动,排除是数据库原因造成的,我们的业务相对简单,且大部分查询是单表查询,数据量很小。

服务器是使用阿里云的ECS,8核16G,CPU占用最高不到百分之二十,基本都在百分之五左右,内存占用也没有什么波动,CPU和内存没有充分得到利用。

我是使用的spring boot 部署,容器是tomcat,配置如下:

server.tomcat.accept-count=500
server.tomcat.max-connections=30000
server.tomcat.max-threads=2000
server.servlet.session.timeout=3600s
server.max-http-header-size=1024000

我启动的时候给JVM分配了内存,命令如下:

     nohup java -server  -Xms10240m -Xmx10240m -jar xxx.jar &

另外我使用的是nginx代理到tomcat的,当天高峰期服务瘫痪的时候,nginx部署的另外一个静态页也同时不能访问,所以我怀疑是nginx或tomcat在哪一个环节出现了问题。

以下是当天12点-16点的一些服务器监控截图:

    

 

所以我想请教一下大家,这是哪个环节的问题造成了瓶颈,有哪些优化方案?

加载中
0
jun-s
jun-s

我简单看了一下,服务器很正确,监控正常,你的高峰瘫痪是指?

snailkky
snailkky
就是很多用户进不来,我自己也进不去,加载不出来,nginx部署的另一个静态页也无法访问
0
口口口S口口口

nginx的静态页面都进不去的话应该是OS的TCP出了问题吧,要不看看你这个服务器当前的文件描述符数量`ulimit -n`。

snailkky
snailkky
回复 @口口口S口口口 : 真是太感谢你了! 我现在很怀疑就是这个原因造成的,我去试试看。
口口口S口口口
回复 @snailkky : :cold_sweat:我也只是知道这个东西,或许你可以写个测试用例试一下,用Jmeter定个6000进程访问看看
snailkky
snailkky
一般每个进程最多允许同时打开1024个文件,这1024个文件中还得除去每个进程必然打开的标准输入,标准输出,标准错误,服务器监听socket,进程间通讯的unix域socket等文件,那么剩下的可用于客户端socket连接的文件数就只有大概1024-10=1014个左右。也就是说缺省情况下,基于Linux的通讯程序最多允许同时1014个TCP并发连接。 是这个原因造成的吗?
snailkky
snailkky
65535
0
_snake_
_snake_

单机的配置降一降,拆分成多节点呗。

0
kakai
kakai

使用令牌桶做限流处理

0
石头捡到布
石头捡到布

我更好奇你这个监控是怎么看到的,为什么我的云监控没你的这么细

石头捡到布
石头捡到布
额,懂了,但是你好像是升级版的,我的是免费版的! 看了下升级版的,一个月都要1099:joy:
snailkky
snailkky
在云服务监控-云服务器ECS,你点进去,再点单个的监控,就可以显示这个图表了。
0
戈什拉彻
戈什拉彻

光看这个不太好分析,信息量太少。首先tomcat本身支持的并发就不高,到了6000肯定是没办法支持的,即使你将你的maxThread设置为2000,以你机器的性能也无法发挥线程的优势,反而增加了CPU线程切换的资源耗费。如果流量真的有这么大,那需要考虑做集群来承载。另外如果你的应用是IO型的,可以试试tomcat的NIO方式。

snailkky
snailkky
我是spring boot2,tomcat默认就是nio
snailkky
snailkky
高版本的tomcat好像默认都是nio,那如果是这样的话,高配服务器就发挥不了它的性能,感觉挺鸡肋的。
0
chentao106
chentao106
看症状貌似你的服务器是共享实例,积分用完之后cpu占用率不能超过20%
snailkky
snailkky
我这个是通用型实例 不是共享型
0
_Mr_Right_
snailkky
snailkky
没有,因为我也怕是带宽的问题,然后我又升级到了60M,程序也没有变化。
_Mr_Right_
_Mr_Right_
回复 @snailkky : 出问题的那天,带宽使用情况怎么样?有没有出现不足
snailkky
snailkky
现在是5M带宽,但我那天临时升级到了20M
0
天空-sky

负载均衡,可以先开3个nginx,9个项目。

snailkky
snailkky
回复 @天空-sky : worker_connections 我配置了65535,另外worker_processes 我配置为8
天空-sky
nginx 还有worker_connections配置,可以了解下
0
开源中国首席罗纳尔多
开源中国首席罗纳尔多

您好,请问一台机器一个服务也就是一个jvm,jvm能充分申请利用机器的内存和CPU等资源的吗?还是一台机器两个服务比较好?

snailkky
snailkky
我就是觉得jvm无法充分利用服务器的性能,我这个服务器是8核16G,算是不错的配置了。
返回顶部
顶部