高并发项目应对方案 快来打我* 2022-12-26 08:15 117阅读 0赞 # 服务监控 # ### zabbix: ### https://blog.csdn.net/weixin\_43822878/article/details/91569016 # 服务器优化: # ### 修改服务器链接数 ### **vi /etc/sysctl.conf 加上** net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_wmem = 4096163844194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 65535 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30 **sysctl -p 生效** ### 第二: ### ### vi /etc/security/limits.conf 加上(25000这个数字根据你服务器的配置可以做适当的调整) ### * soft nofile 25000 * hard nofile 25000 * soft nproc 25000 * hard nproc 25000 * soft memlock -1 * hard memlock -1 ### 最后重新登录 ### ### **查看服务器链接数 :** ### ### ulimit -n ### **查看服务器当前tcp连接情况** netstat -n | awk '/^tcp/ \{++S\[$NF\]\} END \{for(a in S) print a, S\[a\]\}' # 负载均衡 # ### lvs: ### [https://www.cnblogs.com/dswy/p/8418515.html][https_www.cnblogs.com_dswy_p_8418515.html] **分发路数不宜超过cpu总个数** ### nginx: ### [https://blog.csdn.net/qq\_41594146/article/details/85461542][https_blog.csdn.net_qq_41594146_article_details_85461542] [https://blog.csdn.net/qq\_41594146/article/details/85461312][https_blog.csdn.net_qq_41594146_article_details_85461312] **nginx配置负载结点的个数的时候(就是一台服务器需要分发流量到多少台结点)分发个数最好和cpu个数一致,这里要提一点,如果当tomcat结点服务器的配置不一致时可用权重的负载均衡策略做相对应的调整,以达到完全利用服务器资源的目的** **lvs可以和nginx结合起来使用性能更加优秀,nginx对性能消耗要求不是很高,配置上可以考虑4C4GB或者4C8GB** **(lvs负载指向多个nginx然后nginx再分发到各个tomcat结点中)** ### 软负载和硬负载比较 ### [https://www.cnblogs.com/Soy-technology/p/13029518.html][https_www.cnblogs.com_Soy-technology_p_13029518.html] # 缓存: # ### redis搭建: ### https://blog.csdn.net/yjt520557/article/details/86651750 并发接口中经常用到的查询数据可以存入redis中 更新也可以直接更新redis中的缓存数据 可以考虑用定时任务将redis中的数据同步至mysql中 单台服务器的redis的集群结点不宜超过服务器的cpu个数,单台服务器结点最好和服务器的cpu个数一样(redis的搭建可以一台服务器搭建多个结点只需要使用不同的端口和配置文件即可,另外搭建redsi的服务器所需要内存和cpu比较高,硬盘要求则比较低) redis配置建议4C8GB或者4C16GB 具体服务器数量的话根据需求来,2台或者2台以上都可以,如果没有更多要求搭建主从复制即可 # 数据库: # ### 主从集群: ### [https://blog.csdn.net/qq\_41594146/article/details/100121934][https_blog.csdn.net_qq_41594146_article_details_100121934] ### 分表: ### 可以根据日期和业务场景中的唯一标识(例如用户id)做hash分表处理 ### 例如: ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3plYWw5cw_size_16_color_FFFFFF_t_70][] ### 索引: ### 如果分表的处理上和业务上可以允许做唯一索引的 那就建唯一索引,当个字段不能建唯一索引时可以考虑使用组合索引组合多个字段做唯一索引 如果查询条件有多个则需要建组合索引,即便不能新建唯一索引那也要用普通索引来提升查询速度 不然数据库中的数据达到百万级别时 将会更慢,索引可以提升查询时间和查询性能 数据库配置建议2台或者2台以上机器,8C16GB甚至更高,硬盘容量一定要高,最好还是固态硬盘, 一写多读,如果修改操作过多 可以考虑事先修改redis缓存中的数据 再定时同步到mysql中 # tomcat容器优化: # ### 修改配置文件: ### conf/server.xml 69行左右 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="10000" maxThreads="2000" minSpareThreads="100" maxSpareThreads="150" acceptCount="100" redirectPort="8443" /> bin/catalina.sh true or false. 这行上面 110行左右 加上: JAVA_OPTS="-Xms1024m -Xmx2048m -Xss512K -XX:PermSize=1024m -XX:MaxPermSize=2048m" 这些数值并不是固定的 可以根据服务器性能做适当调整 最大内存不宜超过服务器的四分之三或者是三分之二,服务器的内存越大这个比例可以越大 另外再代码里编写过程中最好不要用多线程去处理,tomcat会自己针对请求做多线程操作,如果是数据处理速度问题,如不是实时性要求则可以将数据实现存入消息队列后做处理(类似日志处理) tomcat的数量可以根据并发量来处理,在配置上可以考虑数据多配置低的来处理,例如4C4GB 数量可以根据业务情况来处理,可以通过zabbix的监控来观察tomcat的流量,内存,cpu的消耗来判定服务器是否抗得住,最好需要考虑到平时业务的两倍并发的情况来做配置部署 # 日志: # ### kafka+mysql: ### tomcat直接将日志存入kafka中 另起项目消费kafka的日志数据然后存入myql mysql存储日志必须分表存储,以免堆积数据,日志的分表可以根据业务唯一标识hash以及日期来做分表处理 kafka要求:内存和cpu可以稍微小点,不过结点可以多部署几个,硬盘大小根据你业务情况和使用程度来控制 mysql 如果只存储日志的话 硬盘容量给大 cpu和内存的话可以适当小点,不过一定要做好能快速查询日志的索引 ### kafka+es: ### ### es: ### [https://blog.csdn.net/qq\_41594146/category\_8760814.html][https_blog.csdn.net_qq_41594146_category_8760814.html] logstash直接消费kafka中的数据至es中,es可不搭集群,es机器需要配置比较不错的机器 个人建议还是用mysql分表存储日志比较好 方便处理 并且对服务器的要求也相对更低 kafka同上 es的话如果只是存储日志的话个人不建议搭建集群,直接单台即可,不过内存建议最少都要给到8G 最高不建议超过32G 硬盘的话尽量给大 根据日志情况来 因为es的数据存储原因 同样的数据量 占用的磁盘要比mysql高 cpu的话建议4C或者8C即可 **说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~ 有问题可以评论或者联系q:1559810637** [https_www.cnblogs.com_dswy_p_8418515.html]: https://www.cnblogs.com/dswy/p/8418515.html [https_blog.csdn.net_qq_41594146_article_details_85461542]: https://blog.csdn.net/qq_41594146/article/details/85461542 [https_blog.csdn.net_qq_41594146_article_details_85461312]: https://blog.csdn.net/qq_41594146/article/details/85461312 [https_www.cnblogs.com_Soy-technology_p_13029518.html]: https://www.cnblogs.com/Soy-technology/p/13029518.html [https_blog.csdn.net_qq_41594146_article_details_100121934]: https://blog.csdn.net/qq_41594146/article/details/100121934 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3plYWw5cw_size_16_color_FFFFFF_t_70]: /images/20221120/0b3d900cc2cd46a4882f1b3e1165a597.png [https_blog.csdn.net_qq_41594146_category_8760814.html]: https://blog.csdn.net/qq_41594146/category_8760814.html
相关 应对并发高峰:Java高并发编程实战案例 Java作为一种流行的编程语言,尤其在处理高并发场景时表现出色。以下是一些Java高并发编程的实战案例: 1. **多线程池**: - Redis Cluster: 利 Bertha 。/ 2024年09月10日 09:24/ 0 赞/ 17 阅读
相关 流量洪峰?不惧!手把手教你应对高并发挑战! 大家好,我是你们的小米!今天我要和大家聊一个充满挑战和创意的话题:如何解决瞬时大流量高并发?想必很多小伙伴们在开发过程中都遇到过这个让人头疼的问题吧。别担心,我在这里和你分享我 小灰灰/ 2024年03月24日 21:48/ 0 赞/ 35 阅读
相关 高并发场景以及应对技巧&&SpringCloud高可用架构图 文章目录 高并发场景以及应对技巧 高并发现实生活中的场景 1 高并发基础 1.1 并发与并行 1 末蓝、/ 2024年02月05日 13:04/ 0 赞/ 7 阅读
相关 java高并发解决方案(高并发的解决方案) Java线程并发协作是什么? \ Java线程:并发协作-死锁 \ @author Administrator 2009-11-4 22:06:13 public c 亦凉/ 2023年09月26日 15:24/ 0 赞/ 20 阅读
相关 高并发应对策略 策略 1、在开发高并发系统时,有很多手段用来保护系统如:缓存、限流、降级 2、缓存的目的是提升系统访问速度和增大系统处理能力,可谓是抗高并发流量的银弹 3、而降 妖狐艹你老母/ 2023年06月10日 04:26/ 0 赞/ 66 阅读
相关 高并发项目应对方案 服务监控 zabbix: https://blog.csdn.net/weixin\_43822878/article/details/91569016 服务器 快来打我*/ 2022年12月26日 08:15/ 0 赞/ 118 阅读
相关 Java无锁应对高并发Atomic详解 问题: java多线程有线程安全问题,因为操作非原子,分为三步:1.读主内存的值 2.在工作内存中操作 3.回写到主内存 解决方案: 操作加锁,在写回主内存前,其他 不念不忘少年蓝@/ 2022年12月23日 02:00/ 0 赞/ 195 阅读
相关 详解应对平台高并发的分布式调度框架TBSchedule 【编者按】 TBSchedule是一款非常优秀的高性能分布式调度框架,本文是作者结合多年使用TBSchedule的经验,在研读三遍源码的基础上完成。期间作者也与阿里空玄有过不少 亦凉/ 2022年09月29日 15:54/ 0 赞/ 201 阅读
相关 MySQL应对高tps优化 一般使用innodb引擎做事务管理,死锁也是经常见到的,比如秒杀场景,对一个共同的物品进行减库存,此时我们可以关闭mysql的死锁检测机制,减少单行整体服务的时间。既然关闭了死 快来打我*/ 2022年03月22日 08:44/ 0 赞/ 341 阅读
还没有评论,来说两句吧...