java吧 关注:1,289,036贴子:12,815,945

前段时间给一学校开发评教系统出现了个高并发问题,这里记录下吧

只看楼主收藏回复

背景:给深圳的一个初中学校开发了一个学生评教系统,这个学院有2000多学生,项目开发完后上线是在一个1核2G的服务器上(当时觉得反正用户也不多,按理说这配置虽然低但跑个小项目还是没问题的)。结果在评教正式开始的那天出问题了(tomcat服务器时不时就偷停了,另一块就是全校学生同时登陆的时候很卡很卡,导致用户体验很不好,而且由于tomcat暂停那会还出现了错误数据很是头疼)
大家有什么好的解决方案也可以探讨探讨


IP属地:湖南1楼2021-01-01 16:34回复
    调大一点线程数


    IP属地:广东来自Android客户端2楼2021-01-01 17:49
    回复
      2025-11-25 17:24:05
      广告
      不感兴趣
      开通SVIP免广告
      最简单的升级硬件,另外可以使用新版本的Tomcat利用Servlet的NIO特性,还有就是提升处理请求速度,可以考虑异步处理。
      也给楼主送份学习资料
      自己学习Java过程中整理了一些Java电子书,现在选取了100本经典的分享给大家,放在百度网盘了,需要的同学自取
      链接: 网页链接 提取码: 1234


      来自Android客户端3楼2021-01-01 18:01
      回复
        总共2k个用户一个Tomcat应该能应付,也不是复杂业务,同时并发200个问题不大。刚想说加个NGINX反向代理个几台Tomcat,但看到你那是1核的服务器,也是醉了。


        来自Android客户端4楼2021-01-01 23:56
        收起回复
          如果不换硬件就换软件吧,node你值得拥有。


          来自Android客户端5楼2021-01-01 23:57
          回复
            加机器


            IP属地:浙江来自Android客户端6楼2021-01-02 17:41
            回复
              接着更新下


              IP属地:湖南7楼2021-01-02 20:21
              回复
                解决方案思考:其实最简单的方法就是换一个配置高一点的服务器,但这个成本好高,我给人开发的这个项目也就挣了1500的服务费(出租的形式),暂时还不想花大价钱买贵的服务器。所以这个方案就pass了。所以思来想去要不再买个1核2G的服务器搭建一个集群试试。这里打个比方,用一个破自行车拉一定重量的货物拉不动或者很吃力的情况下,要是换成拖拉机肯定能拉得动,但买拖拉机太贵了而且可能还大材小用了,那我再买个破自行车应该是性价比最高的了。


                IP属地:湖南8楼2021-01-02 20:22
                回复
                  2025-11-25 17:18:05
                  广告
                  不感兴趣
                  开通SVIP免广告
                  下面我分享下我自己的解决过程:
                  1、两个服务器上分别安装好tomcat服务器,并把项目代码上传到服务器然后启动tomcat。先保证两个服务器上的tomcat都能访问项目。因为并发不只是tomcat并发的问题其实最主要的是数据库并发的问题。(多个学生并发登录的时候都是多个ip请求数据库查询导致的,如果我们用两个数据库分担一下压力,一半的学生访问Atomcat上的A数据库。另一半的学生访问Btomcat上的B数据库。然后让这两个数据库的数据保持一致不就ok了嘛)


                  IP属地:湖南9楼2021-01-03 19:25
                  回复
                    2、修改项目jar包(源码是用springboot框架开发的)数据库jdbc配置文件,Atomcat配置A服务器上的数据库,Btomcat配置B服务器上的数据库。并把A数据库和B数据库实现主主复制就行了。 ①配置文件--A服务器的mysql数据库配置文件vi /etc/my.cnfserver-id=11 #任意自然数n,只要保证两台MySQL主机不重复就可以了。log-bin=mysql-bin #开启二进制日志auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填nauto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQLbinlog-ignore=mysql #忽略mysql库【我一般都不写】binlog-ignore=information_schema #忽略information_schema库【我一般都不写】replicate-do-db=aa #要同步的数据库,默认所有库--B服务器的mysql数据库配置文件vi /etc/my.cnfserver-id=12log-bin=mysql-binauto_increment_increment=2auto_increment_offset=2replicate-do-db=aa配置好后重启MySQL② 开始构建主主复制第一步:在B中创建一个A主机中可以登录的MySQL用户用户:mysql11密码:mysql11mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql11’@’A主机ip’ IDENTIFIED BY ‘mysql11’;mysql>FLUSH PRIVILEGES;第二步:在B主机mysql查看二进制日志名和位置mysql>show master status;


                    IP属地:湖南10楼2021-01-04 16:13
                    回复
                      特殊时期特殊处理 高并发的时候你就用自己电脑当第二台服务器也行吧


                      IP属地:浙江11楼2021-01-04 16:37
                      收起回复
                        你查下cpu、内存,还有你设置的多大的jvm空间,查询下gc的频率,看下最高并发多少才能问啊,直接这样问。。谁能告诉你解决方案


                        IP属地:北京12楼2021-01-05 18:08
                        回复
                          然后看下你接口耗是主要在哪,网络?逻辑处理,还是查数据库,大部分这种都卡在数据库,然后看连接池数目、表有没有加索引之类,


                          IP属地:北京13楼2021-01-05 18:09
                          收起回复
                            第三步: 告知二进制文件名与位置在A主机中执行:mysql>CHANGE MASTER TOMASTER_HOST=’B主机ip’,MASTER_USER=’mysql11’,MASTER_PASSWORD=’mysql11’,MASTER_LOG_FILE=’mysql-bin.000084’,MASTER_LOG_POS=107;第四步:分别开启start slavemysql>SHOW SLAVE STATUS\G #查看是否配置成功

                            当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常最后你可以新建表插入数据测试下看能不能实现两个数据库同步


                            IP属地:湖南14楼2021-01-05 23:35
                            回复
                              2025-11-25 17:12:05
                              广告
                              不感兴趣
                              开通SVIP免广告
                              3、配置nginx负载均衡分配两tomcatnginx默人的链接数是1024,这里改成5000
                              events {
                              worker_connections 5000;
                              }

                              启动nginx就可以了。


                              IP属地:湖南15楼2021-01-05 23:36
                              回复