所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

发布时间:2020-04-15 16:12:05

资讯分类:服务器  并发  内存  tomcat  线程  堆栈  进程
高并发得时候服务器压力大,是内存的问题还是cpu的问题?

你好,我是一枚Java开发人员,欢迎关注我的头条号交流行业里关于代码方面的那点事,谢谢!

首先,你的这个问题描述的有些问题,你的问题应该是Web应用部署在Linux下的Tomcat容器中,在高并发的时候服务器压力大。线程开的多少跟你的Web程序有关,跟Tomcat无关,如果你怀疑线程的问题,你得检查你的程序,下面我告诉你一个方法,可以排查(jstack之jvm性能调优,也是我在工作中实际遇到的一个问题)。

如何用jstack找出最耗CPU的线程并定位代码

jstack是JVM自带的一个堆栈跟踪工具。根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多,下面是具体操作过程。

1、用top命令查看Linux服务器CPU、内存及IO的使用情况

如果服务器压力大,通过是由于某个进程占用CPU资源过高导致的(针对这个问题,你看下java进程),可以在top视图里很清晰的看到,高的时候会超过百分百。

2、找出java进程的PID

命令:ps -ef|grep java

输入的java进程的PID=21711

3、找出进程内最耗CPU的线程

根据第2步中的PID找出进程内最耗CPU的线程,可以用以下三条命令:

  • ps -Lfp pid
  • ps -mp pid -o THREAD, tid, time
  • top -Hp pid

TIME记录了各线程耗费CPU的时间,其中PID为21742的线程耗时最多。

4、用jstack命令输出进程的堆栈信息,并定位相应代码

由于jstack输出的堆栈信息里,线程PID全是16进制,所以,我们需求将第三步最耗时的线程21742转为16进定,可以这么做:

printf "%xn" 21742

得到21742的十六进制值为54ee,下面会用到,实在不会写,就用计算器(运行里输入:calc即可弹出)

jstack 输出堆栈信息的命令:

jstack 21711 | grep 54ee

我的天,原来问题出在ActiveMQ上,是Web应用跟ActiveMQ通讯时出现了问题,通过检查MQ后才发现,MQ挂死了,在IE里访问MQ的管理控制台都打不开,MQ重启后一切正常。

很多程序员都是喜欢开发新的需求,不喜欢修改BUG,尤其是一些疑难杂症。所以很多人对JVM性能调优相关的东西知道的很少。其实,JVM性能调优是Java中非常重要的知识点,我们要必须了解,尤其是一些JVM调优工具。

如果大家有什么疑问,或者有更好的知识经验,不妨分享出来,共同学习,共同进步,谢谢大家!

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

这个问题可以从多方面来看,当多并发请求的时候,查看一下cpu使用情况,你会发现cpu正常一点是百分之80左右 说明服务压力不小,但也可以忍受

这个时候你去查看一下数据库的压力是否变大了,如果数据库的压力没有变大,而tomcat的压力持续上升,看一下tomcat对jdk是否调优,如果你的服务器是64g,是否把链接的数量调大,内存占有调大

如果cpu还在持续上升而数据库正常,把数据库连接池数量调大,一般瓶颈就是卡在大量用户在服务处理,但连接池就那么多,如果还是持续上升且数据库也开始有压力了 是否应该sql调优 考虑负载均衡,分表分库等等等等 服务是不断调优的过程

服务器他只是一台容器,他的压力在于你服务的压力,服务器本身没有压力,如果服务器配置有高有低,顶多是用反向代理时把权重对低的减少,只要程序大的方向对,从一个点升级到多点,从多点进行微服务的拆分,以后横向加机器

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

题主二愣子半吊子开发吧,估计不能算开发,勉强算个码农!我当年维护服务器时候,就最讨厌你这种人了,并发起来,应用瞬间卡顿,缓慢,或者直接跪了!那些开发都把锅甩给我,说我服务器故障!最后基本都是代码上的问题!故而久而久之。。。老夫逐渐转开发了。。没办法,逼的,你不去学,不去钻研,这口锅你被定了!

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

看到这样的问题想吐槽,浏览一下大家根据自己经验做出的回答又挺感动。

“高并发‘得’时候”,估计大家都不忍心指出这样的错别字,可是,我觉着作为开发人员,出现这样的bug是不应该的,你的一次提交,就是一次自己产品的上线啊,细心一点,严谨一点好吗?

“服务器压力大”,怎么知道的服务器压力大?表现如何?在反映服务器压力的时候,要从CPU、磁盘IO、内存占用率、网络IO等方面描述,才能支撑你的问题,别人才好回答。

“是内存问题还是CPU问题”,从问题来看,真的无法判断。

不严谨,不讲逻辑的提问,还是不回答为好。

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

个人认为首先应该明确的是该服务器上跑的服务到底是哪种类型的服务,这个很关键。1. 如果服务器上所跑的服务是计算密集型的,那么压力大的明显特征是CPU利用率在90%以上。

2 如果服务器上所跑的服务是数据存取密集型的,那么压力大的明显特征就是数据库收到的请求数量较大。可以通过系统IO的繁忙程度来判断。

如果是计算密集型的业务,当CPU利用率稳高不下的时候,服务器的耗电量和散热量都会提升。数据存取密集型服务,IO利用率高的环境下,硬盘的损坏率会变高。这些都是表现在外的物理特征。

3.还有一种是互联网数据处理类的业务,很有可能是CPU利用率不高,IO利用率也不高,但是内存占用奇高。一般这种现象都是由于服务端程序设计不好,导致的内存堆积,服务器所承受的实际压力并不大。

因此,内存占用多少并不能反映服务器的真正负载情况,而CPU和IO利用率才能如实反应这些。以上信息仅供参考。

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

据我观察,目前基本是数据库io是比较大的瓶颈。比如,可以这么去模拟一下,打开1000个sql查询窗口同时执行一个千万级表的查询。不卡死你才怪。但是产生这个瓶颈的话,是为啥?软件架构不对咯……为毛不做队列?为毛不放内存数据库?为毛不分表分库?所以别动不动说硬件瓶颈咯……给你个跑车,你没驾照也开不走咯。

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

感谢邀请!

单台服务器的情况下,多大型任务并行,我感觉内存和CPU同等重要。

但是首先保证内存在足够的情况下,才考虑是不是CPU的问题了,因为内存就相当于马路,越宽广,同时并行的车就越多,CPU就如同收费站,收费窗口太少了,收费太慢了,都会造成拥堵。

所以说,内存是前提,CPU是关键!!

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

蠢哭啦 还要补充linux tomcat

任何学过操作系统原理的人都不会问这种问题

肚子饿的时候 是胃太大 还是吃的太少

并发 并行 概念清楚么

并发是网络 涉及到网络端口

到计算机内部 涉及到资源分配

一核有难 八方围观还是支援

哪里不够加哪里 有什么为什么好问的

问个问题不能写的明确点 以为别人是你爹?

最好是写好代码送到您面前 大爷 满意么 这个月的零花钱够不够啊

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

内存和CPU都存在问题,不过最重要的是数据库的问题

同意请Q1

反对请Q2

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

个人觉得服务器压力大分很多种情况,比较好说的就是此服务到底是cpu集中型还是io集中型,内存方面主要看数据处理运行时所需要活跃数据情况,当然如果数据情况还需要不断进行网络io或者磁盘io也可能是服务器的文件句柄超出限制,虽然ulimit可以控制用户的进程占有文件句柄数但是每个文件句柄还得消耗资源嘛,比如cpu的切换,内存空间占用,这些都可能导致服务器资源消耗,并发压力取决于你的程序到底是什么逻辑,tomcat其实也是一个程序,只不过web程序借助这个tomcat进行运行,tomcat封装好了很多东西使得web开发运行不需要程序员考虑过多细节,只需要注重逻辑,当然tomcat作为一个程序其线程等均受限于linux系统的进程运行配置,比如线程栈大小等,Linux是操作系统,tomcat是程序,我们的程序只是借助tomcat更方便运行其实我们自己也可以写一个类似tomcat的程序,来帮助我们程序运行,只是这样有造轮子的意思了,如果不是想深入了解,没有必要重复造轮子的,Linux服务器中也有很多非web程序比如一些nosql像redis,ssdb,kafka,mq等,也会消耗系统资源,但他们都是非web的程序的,这个问题说起来很麻烦的,只能具体场景具体分析

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

作为一个性能测试人员,这个问题太模糊了。但是如果客户这么问的话,可以去现场定位下:

发现服务器压力大的时候,CPU和内存使用情况是什么?应用访问慢不慢?数据库访问慢不慢?有没有报错信息产生?

如果是CPU 常年100%占用率,那就是说明CPU问题,需要看看是应用还是数据库的CPU占用的?如果是内存太小,那就要加大内存,或者分析下堆内存信息,看看程序是不是有问题,数据库配置的内存是不是太大。

还有种可能性,就是配置问题,开发人员在现场配置环境的时候,将某个资源参数设置的太小,导致整体应用较慢。而判断成服务器压力大。

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

数据库的服务器,高主频,高核,尽量用到至强2*E5-2660V4或者以上,内存看访问人数。其实压力最大的就是峰值的时候,100号人的峰值,128内存差不多,再者刚刚以为朋友说到磁盘IO, 不知道有没有用存储,数据盘尽量用SAS10K,预算高点可以考虑15K硬盘, 如果有存储,不管是EMC还是IBM的都有数据分层,用固态硬盘做缓存。

所以,压力大不仅仅表现在cpu或者内存,甚至网络也有因素,是否是万M网卡。

参考吧!

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

问题描述不清。高并发分析需要系统化思考。服务器只有三种资源: CPU, IO, MEM。题主可以把各方的情况放上来,才能分析。建议先提升效率再扩硬件。通常高并发效率提升建议先把单线程,单进程调优到极致再优化并发协同部分。这里面又有很多内容

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

有道理

高并发得时候服务器压力大,是内存的问题还是cpu的问题?

这个问题了俺答不了,俺甚至不知道题主想问啥

留言与评论(共有 0 条评论)
   
验证码:
Top