首先介绍下情况,并发量最多可达到万级,应用程序架构是基于SSH的,系统级是通过Apache分发,集群配置。但是目前情况不理想,我对系统级架构都是在钻研期间,下面是自己查的总结,但还是不怎么理想,各位熟悉的敬请赐教
1. 对于应用程序级,在SSH框架中,性能优化的措施有:
     1)节省事务占用内存,通过AOP分配不同业务层,节省事务内存开支
     2)对常用的数据进行缓存,提高性能,对内存占有量提升,矛盾中。。
     3)代码级优化,这个问题不能改的太全面,毕竟项目庞大,时间上是个问题
     4)高并发量,使用Hibernate是个问题,但是这个时候更换技术架构是个问题
对于高并发技术框架应该不是根本问题,数据库集群和应用服务器集群应该是重点问题,但是这方面还是欠缺,很是着急。。。熟悉的人敬请赐教
2. 系统级性能优化目前想到的措施是:
     1)负载均衡,集群方案
     2)数据库集群
这两个问题可能是关键,熟悉的人敬请赐教了
3. 对于JVM的考虑:
    1)由于Hibernate缓存使用,JVM内存分配是个问题
加重GC负担,并且当持续使用的情况下,很可能内存不够用,然后就崩溃了,经常的问题就是 内存溢出
有熟悉的人希望给些建议
问题补充

kimmking 写道
你说对了

2. 系统级性能优化目前想到的措施是: 
     1)负载均衡,集群方案 
     2)数据库集群

关于系统级解决方案能给点建议吗? 目前是通过Apache进行复杂均衡,四个Tomcat,具体性能问题还不清楚在哪里?高并发后就出现内存溢出问题,服务器瘫痪,Session丢失,敬请赐教
问题补充

soci 写道
读缓存 写异步

Hibernate中常用数据使用了缓存,很多操作都采取了读缓存,但问题还是出现,内存溢出,服务器瘫痪,Session丢失 
问题补充

pejaming 写道
1.检查代码
2.给tomcat加内存
3.给机器加内存

代码检查过了,我怀疑是系统级的问题,应用程序代码等也都检查过。 目前服务器上的内存是16G JVM内存是4G 在JVM中也对新生态和长久态都做了根据情况的设定
问题补充

FeiXing2008 写道
找找你系统瓶颈到底在哪里,不是一味光着想。
1.可以使用AOP方法来计算一些方法用所需要的时间。看看程序中哪个地方用时比较多。
其中观看一些DAO方法,是不是真是数据库的问题。

2.用JVM观察软件查看线程使用情况,看看是不是线程池问题。

3.如果内存真的很大,那样需要dump一下。

4.你服务网络上的带宽是不是不够大?

5.负载那里的权值行不行。

6.尽量使用Cookie而不是使用Session,最好将Session关掉。

7.对IO操作多否,是不是IO花了好多时间。

Cookie和Session都有用到,IO操作是很多,文件服务器和Web项目是不同的服务器,IO包括图片文件以及日志等。
测试下关键的方法时间和观察JVM线程两个问题是个思路
问题补充

mccxj 写道
基本情况:并发量最多可达到万级,SSH架构,Apache+4*tomcat,内存是16G JVM内存是4G
数据库? 操作系统? 几个服务器?硬件:cpu,memory,network 看看是不是都够用?apache也会占用不少内存~

现象:加重GC负担,并且当持续使用的情况下,很可能内存不够用,然后就崩溃了,经常的问题就是内存溢出
考虑分布式二级缓存,例如memcached
tomcat的session方案http://www.iteye.com/news/15499-tomcat-memcached-session
hibernate的memcached方法 hibernate-memcached,国产Xmemcached这个客户端也提供了hibernate支持

找到哪些url比较常使用又比较耗时~~优先解决
对有些特别耗时耗io的操作~~优先解决

关键还是识别瓶颈~~

数据库是Oracle  服务器是Linux  4个,网络带宽够用,移动的项目。 软件方面Apache(之前是两个),后来换一个。 
二级缓存使用过多,我担心JVM的长久态过多,增加GC的压力,所以在配置JVM中,将长久态的内存放大些,因为总是溢出。 研究下hibernate的memcached
问题补充

fins 写道
楼主 怎么检查的代码? 我觉得还是代码出的问题.

项目经历两年了,最早的版本应该没问题,所以检查就是新的代码,例如异常连接关闭,还有就是对异常处理,这些是对代码检测。程序框架没有修改,对于代码没有更新非常大,就类似打补丁了
问题补充

srdrm 写道
关注。
希望楼主做更深入的检测,
数据库,及会话处理部分应该是最重要的性能瓶颈问题。
大家一起来想办法

恩 我也是觉得Session是个瓶颈,也做了些小的处理。 数据库方面Hibernate,JDBC混合式的
问题补充

srdrm 写道
看楼主的描述有个概念没说清, “并发量最大可达到万级”,是指当前的并发量吗?那你的目标并发量是多少,你的场景需要多大的并发量,现在达到了百分之多少

哦 可能我没说明白,这个并发量是最大的情况,大约在中午左右,访问量最大时候的并发量
问题补充
我先把程序后台发现的问题先贴出来。 部分BUG我也都解决了,应用程序集问题把重要的贴出来,我在网上也查些资料。把棘手的贴出来,感谢大家了
1. java.net.SocketException : Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:531)
at org.apache.jk.common.JkInputStream.endMessage(JkInputStream.java:121)
at org.apache.jk.core.MsgContext.action(MsgContext.java:304)
at org.apache.coyote.Response.action(Response.java:183)
at org.apache.coyote.Response.finish(Response.java:305)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:195)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)
Mar 31, 2010 5:38:52 AM org.apache.jk.common.ChannelSocket processConnection
WARNING: processCallbacks status 2
2. com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@f0da27b -- APPARENT DEADLOCK!!! Complete Status: 
        Managed Threads: 3
        Active Threads: 0
        Active Tasks: 
        Pending Tasks: 
                com.mchange.v2.resourcepool.BasicResourcePool$1RefurbishCheckinResourceTask@66b6837
Pool thread stack traces:
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]
                java.lang.Object.wait(Native Method)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]
                java.lang.Object.wait(Native Method)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]
                java.lang.Object.wait(Native Method)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:534)
3. Exception in thread  "process reaper"  java.lang.OutOfMemoryError: Java heap space
        at java.io.BufferedOutputStream.<init>(BufferedOutputStream.java:59)
        at java.io.BufferedOutputStream.<init>(BufferedOutputStream.java:42)
        at java.lang.UNIXProcess$1$1$1.run(UNIXProcess.java:123)

问题补充
数据库也需要做负载

viei 写道

高并发请求,其实还是在架构上多下功夫,代码级别因为为次要的(当然也很重要)。

高并发量请求,应用服务器需要做负载,数据库也需要做负载
应用服务器负载形式很多种(lvs,haporxy,nginx,dns轮询,f5上面这些可以结合使用)
数据库的负载相对来说单一(集群,读写分离),当然要考虑好对数据库性能和操作数据库方法的调整,减少事务的使用范围。

jvm优化主要是参数的配置,hibernate缓存的使用需要设计好,如果系统做分布式集群单机cache如何保证有效性,考虑无键值数据库或者memcache着一类的东西吧。

说了这些,你可能觉的比较笼统
我觉的问题是这样的,你的并发大,关键是你是什么类型的应用。
对数据库操作什么类型的比较多,是都要保证事物的,还是对事物要求一般,是查询多呢,还更新插入多。

如果都是事物保证型的数据库操作,那么在数据库压力分解上还需要使用平行分库
实现数据库横向(集训)和纵向(水平分库,单数用户放到a数据库,双数用户放到b数据库【不一定如此分,举例】)的压力分解

恩我觉得代码上应该不是主要的瓶颈,昨天我在代码上已完成些优化,查询相对多些,将查询事务干脆去掉了。服务器分发上F5和Apache两者选择。数据库上没有进行负载,JVM的参数设置上,综合考虑的,因为缓存多,永久太多些,所以就根据情况多分了些, 我也担心是Hibernate缓存没有合理运用,目前也是使用ecache,系统分布式集群也可能有问题
问题补充
http://tech.it168.com/o/2007-11-02/200711021343406.shtml
一个Yahoo和MOP都参加过架构的一个人的文章,和大家分享下,应该有所思考
群:157094416 找到的文章。

------------------------------------------------------------------------------------------------------------------
问题补充:

forchenyun 写道
HTML静态化
图片服务器分离
数据库集群和库表散列
     Mysql Master-Slave(MySQL主从复制)
     内存表
     分布式数据库技术
     垂直切分,按照表的内容将不同的表划分到不同的数据库中
     水平切分,根据用户的ID将不同用户的内容再划分的不同的数据库中
缓存
CDN
镜像
负载均衡

恩 CDN 和镜像的好处在于?

------------------------------------------------------------------------------------------------------------------
问题补充:

sw1982 写道
1、看看tomcat配置手册,经常的outofmemory还是可以用参数优化掉的
2、分析sql,要有监控日志,查看用得最多的20条、最慢的10条。搞定基本就ok了!

3.不要事务。。真的不要事务。考虑下业务是不是真的重要到这个程度了

恩 周末我在看看官方的一个权威Tomcat手册,希望能找到方案
事务也是要的,对于增删改需要的,对于查询考虑应该不用

------------------------------------------------------------------------------------------------------------------
问题补充:

csslisi 写道
java.net.SocketException: Broken pipe 个人认为是后台服务器会写页面时,客户端已经关闭,用户等不耐烦了,呵呵,这应该是服务器性能导致。

另外,1w个并发以现有的硬件设备可能不够,重新规划一下部署吧,集中式处理解决不了,可以考虑按业务去划分应用系统

恩 SocketException 通道堵塞可能是你所说的,前台界面用了Freemarker代替JSP的,渲染Fremarker可能是有问题

------------------------------------------------------------------------------------------------------------------
问题补充:
我有个疑问JavaEye为什么把这给帖子由论坛放到问答栏目了? 我觉得这是做高访问量都可能遇到的一个问题,找到通用的解决方案和成熟的思路,这是所有JavaEye爱好者集思广益,讨论出更好的解决方案。。而不单单是个问答栏目的一个题目。。 不理解后台管理员在搞什么。。 算了我还是有时间研究下官方的Tomcat吧。。。 很感谢那么多人提出的建议,我会总结下

------------------------------------------------------------------------------------------------------------------
问题补充:
附件里是我刚简单的画了下部署图,和之前做了些改动,目前没有服务器瘫痪,但只是暂时解决,问题瓶颈还在研究中。。。 先巩固客户了

感谢各位了

------------------------------------------------------------------------------------------------------------------
问题补充:

forchenyun 写道
F5都用上了,lz居然1w的并发都。。。

目前按照我的上面部署图暂时解决了,但问题还是会出现,例如服务器瘫痪


------解决方案--------------------------------------------------------
你说对了

2. 系统级性能优化目前想到的措施是: 
     1)负载均衡,集群方案 
     2)数据库集群 
------解决方案--------------------------------------------------------
读缓存 写异步
------解决方案--------------------------------------------------------
1.检查代码
2.给tomcat加内存
3.给机器加内存
------解决方案--------------------------------------------------------
找找你系统瓶颈到底在哪里,不是一味光着想。
1.可以使用AOP方法来计算一些方法用所需要的时间。看看程序中哪个地方用时比较多。
其中观看一些DAO方法,是不是真是数据库的问题。

2.用JVM观察软件查看线程使用情况,看看是不是线程池问题。

3.如果内存真的很大,那样需要dump一下。

4.你服务网络上的带宽是不是不够大?

5.负载那里的权值行不行。

6.尽量使用Cookie而不是使用Session,最好将Session关掉。

7.对IO操作多否,是不是IO花了好多时间。

------解决方案--------------------------------------------------------
SNA,memcached,在论坛里面找找
------解决方案--------------------------------------------------------
优化工作要充分利用20 - 80 定律,先找出占用80%资源的那20%点,找出来了再优化。
比如说优化读写,开始的时候费了很多effort在cache上面,到最后发现实际上是一个频繁的写应用。
------解决方案--------------------------------------------------------
处理高并发的方案就是分布式部署,缓存服务器,负载均衡,非共享架构设计,数据水平分割。
ssh没问题.
------解决方案--------------------------------------------------------
基本情况:并发量最多可达到万级,SSH架构,Apache+4*tomcat,内存是16G JVM内存是4G
数据库? 操作系统? 几个服务器?硬件:cpu,memory,network 看看是不是都够用?apache也会占用不少内存~

现象:加重GC负担,并且当持续使用的情况下,很可能内存不够用,然后就崩溃了,经常的问题就是内存溢出
考虑分布式二级缓存,例如memcached
tomcat的session方案http://www.iteye.com/news/15499-tomcat-memcached-session
hibernate的memcached方法 hibernate-memcached,国产Xmemcached这个客户端也提供了hibernate支持

找到哪些url比较常使用又比较耗时~~优先解决
对有些特别耗时耗io的操作~~优先解决

关键还是识别瓶颈~~
------解决方案--------------------------------------------------------
内存不够的话映射文件

------解决方案--------------------------------------------------------
不键议使用太多memcached-session,因为这样往往无形地将系统搞得好复杂。

最好还先看看方法执行时间。看看字符串有没有很多的subString, split之类的操作。还有对文件处理时有没有半一些bufStream之类的流对象。
------解决方案--------------------------------------------------------

FeiXing2008 写道
不键议使用太多memcached-session,因为这样往往无形地将系统搞得好复杂。

最好还先看看方法执行时间。看看字符串有没有很多的subString, split之类的操作。还有对文件处理时有没有半一些bufStream之类的流对象。

代码的话先用findbugs过过眼~~
------解决方案--------------------------------------------------------
楼主 怎么检查的代码? 我觉得还是代码出的问题.
------解决方案--------------------------------------------------------
关注。
希望楼主做更深入的检测,
数据库,及会话处理部分应该是最重要的性能瓶颈问题。
大家一起来想办法
------解决方案--------------------------------------------------------
看楼主的描述有个概念没说清, “并发量最大可达到万级”,是指当前的并发量吗?那你的目标并发量是多少,你的场景需要多大的并发量,现在达到了百分之多少
------解决方案--------------------------------------------------------
如果总是内存溢出的话,建议检查是否存在内存泄漏。建议在泄漏时把JVM内存快照抓出来进行分析。
Hibernate缓存方面我不清楚你们使用的是哪种缓存。不过因为是集群部署,所以一定要支持集群同步。如果你们的缓存不支持集群,那么就会造成脏数据。
如果你非常怀疑是缓存引发的问题,那么可以尝试把Hibernate缓存关掉,看看负载情况。是否还有泄漏。以确定是否是缓存管理不好引起的。
目前JVM的内存不宜设定太大,4G已经差不多是极限了,GC会比较长。其实有时候调小反而会提高速度。建议先试试2G。Hibernate缓存建议从小往大慢慢调整,边调边测。过期时间也要设定好,过长和过短都不合适。这个只能慢慢根据实际情况进行调整。
------解决方案--------------------------------------------------------
首先确定你的系统瓶颈出在哪
------解决方案--------------------------------------------------------
希望楼主把如下信息描述得再清楚些,不然我们也没有办法帮你分析。
1.系统的具体部署架构:最好画个图,整个系统一共有多少台服务器,每台服务器的作用 他们上面部署的东西,各服务器之间的调用关系。 并指出经常出现崩溃的具体服务器节点。
2.将该服务器崩溃时,后台输出的异常信息贴出来,这样就更清楚些。
3.将崩溃的服务器的具体优化参数贴出来,我不要你以前笼统的描述多少。你直接将你优化的参数从配置文件中拷贝贴上来。
另外推荐一个非常轻量级的JVM内存查看工具jvmstat监视服务器的内存使用情况。楼主提供了这些信息,我们才好分析哈
------解决方案--------------------------------------------------------
一个交易一个交易的测试,并检查代码,优化代码中最不合理的地方。

程序如果有问题,方案在好,内存再大也白扯! java.sql.SQLException: [Microsoft][SQLServer JDBC Driver]System Exception: Socket closed
------解决方案--------------------------------------------------------

handonghandong 写道
fins 写道
楼主 怎么检查的代码? 我觉得还是代码出的问题.

项目经历两年了,最早的版本应该没问题,所以检查就是新的代码,例如异常连接关闭,还有就是对异常处理,这些是对代码检测。程序框架没有修改,对于代码没有更新非常大,就类似打补丁了

不是说旧代码没有问题,而只检查新代码的
都需要跟踪回旧的代码。

内存溢出具体是什么错误,最好贴个错误信息来看看。是内存不够还是溢出,这里都是两个概念。
------解决方案--------------------------------------------------------
内存溢出的情况有2个大的方向:1.一个是永久存储区内存溢出。2.java heap(堆空间)溢出。如果是永久存储区不够用的话,你怎么改程序都解决不了;如果是堆空间溢出的话,也不能肯定就是程序的问题,因为服务器的容量一定是有有限的,因为你的内存,IO能力总是有限制的;如果你的服务器资源在1000个处理线程已经满负荷了,而你的设置允许他的最大线程为2000个。但负载超过1000后,你不内存溢出才怪!当然内存溢出出在程序上的可能性最大。要最具体的分析才能对症下药。

大并发量,大数据量基于SSH应用程序架构有关问题相关推荐

  1. .NET 大数据量并发解决方案

    .NET 大数据量并发解决方案 目录 .NET 大数据量并发解决方案 第一类情况 :大量的用户同时对系统的不同功能页面进行查找.更新操作 一.对服务器层面的处理 二.对数据库层面的处理 三.ADO.N ...

  2. 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答

    1 文章概述 在业务发展初期单表完全可以满足业务需求,在阿里巴巴开发手册也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时 ...

  3. 软件架构场景之—— 分表分库:单表数据量大读写缓慢如何解决?

    业务背景 一个电商系统的架构优化,该系统中包含用户和订单 2 个主要实体,每个实体涵盖数据量如下表所示 实体 数据量 增长趋势 用户 上千万 每日十万 订单 上亿 每日百万级速度增长,之后可能是千万级 ...

  4. 大数据量并发处理(一)

    大并发大数据量请求一般会分为几种情况: 1.大量的用户同时对系统的不同功能页面进行查找,更新操作 2.大量的用户同时对系统的同一个页面,同一个表的大数据量进行查询操作 3.大量的用户同时对系统的同一个 ...

  5. react大数据量渲染_React大量数据渲染的绝佳解决方案——React虚拟化组件

    介绍 在当下Web开发盛行的时代里,Web应用随之面临着各种问题,虽然前端框架或者前端解决方案百花齐放,但是并不是所有的问题都能很完美的解决.由于Web应用是基于浏览器渲染界面的,而由于浏览器瓶颈的限 ...

  6. 处理高并发、大数据存储的网站技术架构

    本文转载自: https://zhuanlan.zhihu.com/p/24669514 大型网站技术架构剖析 高并发,大流量 40亿.PV.page view.3.5亿,IP. 高可用,高可用MyS ...

  7. altium09怎么查元器件_长文图解:单张表数据量太大问题怎么解决?请记住这六个字...

    JAVA前线  欢迎大家关注公众号「JAVA前线」查看更多精彩分享,主要包括源码分析.实际应用.架构思维.职场分享.产品思考等等,同时也非常欢迎大家加我微信「java_front」一起交流学习 1 文 ...

  8. rdd数据存内存 数据量_Spark 性能优化(二)——数据倾斜优化

    1.2 数据倾斜优化 1.2.1 为何要处理数据倾斜(Data Skew) 什么是数据倾斜?对 Spark/Hadoop 这样的大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜. 何谓数据倾斜?数据 ...

  9. 百分点大数据技术团队:舆情平台架构实践与演进

    编者按 现代社会每天都有大量信息产生,抖音.小红书等自媒体的普及,不断丰富着人们表达看法.传播诉求.分享信息的渠道和形式.如何完成多源异构数据的收集和处理,挖掘海量信息中的价值,洞察事件背后的观点和情 ...

最新文章

  1. 诚信,聪明,快乐,地位与竞争
  2. 小米输掉官司,倒打一耙不如坦然认错
  3. TPS54360 输入60V,输出3.5A降压开关电压
  4. java中HashMap的用法
  5. (57)UART外设驱动波特率(二)(第12天)
  6. 安装hive操作参考视频
  7. 读书月巨献丨博文视点大咖直播伴你读
  8. jquery左边滚动,完毕后跳转回来
  9. 常见RFID卡片介绍、破解思路 及 Proxmark3简介
  10. 制作数据库导出模板,导出数据库设计说明书
  11. WPF教程(四) Hello,WPF!
  12. Ubuntu16.04 安装 卸载 pip
  13. java外文文库_java外文文献毕业设计
  14. css骨架图,【CSS】骨架屏 Skeleton 效果
  15. 用于高频接收器和发射器的锁相环(PLL)——第二部分 与PLL相关的两个关键技术规格
  16. (学习笔记)JAVA开发需要掌握哪些技术?
  17. Mybatis基础学习之万能的Map和模糊查询
  18. seo优化时网站_选择关键词的方法
  19. android电梯程序设计,[源码和文档分享]基于Android实现的电梯调度模拟
  20. linux scp连不上主机,如何使用WinSCP连接Linux主机

热门文章

  1. VCR(2维码读取器)-PC Data transmission - RS232
  2. java 及时释放内存_Java 等语言的 GC 为什么不实时释放内存?
  3. mysql设计规范3nf_数据库1NF-3NF范式深入理解
  4. 删除父节点下的所有子节点
  5. 微信小程序之跳转wx.switchTab的使用
  6. mmdetection实战,训练扑克牌数据集(VOC格式)并测试计算mAP
  7. 索尼电视显示由于服务器无法启动,索尼电视无法安装软件怎么办,最新解决办法...
  8. 络达AB1562双耳间数据通信的一种方法
  9. 为什么至少三个哨兵_Redis集群哨兵机制
  10. 液晶显示温度计电路设计解析_温度传感器电路