架构师专栏
文章平均质量分 87
AlexChowKey
路漫漫其修远兮,吾将上下而求索。
展开
-
内存溢出解决方案
什么是内存溢出JVM运行过程中,程序不断的申请内存空间用于保存运行时数据,当程序申请的内存空间系统无法满足时,就会抛出内存溢出错误。内存溢出发生的区域以及相应的解决方案都不相同,下面我们逐一分析内存溢出类型及解决方案。OutOfMemoryError与StackOverflowErrorJVM内存溢出分为两种情况,OutOfMemoryError和StackOverflowError。OutOfMemoryError是在程序无法申请到足够的内存的时候抛出的异常。StackOverflowErr原创 2022-04-09 16:15:01 · 878 阅读 · 0 评论 -
常见系统安全漏洞及解决方案
一、SQL注入漏洞漏洞说明SQL注入攻击是Web安全领域中一种最为常见的攻击方式,其本质是将用户输入的数据当做SQL语句代码一部分执行。这些攻击通常是发生在将不可信的数据作为命令或查询语句的一部分,拼接到程序代码中,作为可执行程序的一部分指令执行,从而执行了计划外的命令,或访问了未被授权的数据。要解决注入攻击,必须遵循 “数据与代码分离”的基本原则。解决方案1.对SQL调用,要求所有的SQL语句及存储过程的执行,都使用预编译语句绑定变量,禁止将参数通过字符串拼装的方式组合到SQL语句中。2.变原创 2022-04-09 15:42:22 · 6134 阅读 · 0 评论 -
JVM参数调优
一、HotSpot JVM 提供了三类参数现在的JVM运行Java程序(和其它的兼容性语言)时在高效性和稳定性方面做的非常出色。例如:自适应内存管理、垃圾收集、及时编译、动态类加载、锁优化等。虽然有了这种程度的自动化(或者说有这么多自动化),但是JVM仍然提供了足够多的外部监控和手动调优工具(允许命令行参数可以在JVM启动时传入到JVM中)。在有错误或低性能的情况下,JVM必须能够让调试,JVM提供了几百个这样的参数,所以如果没有这方面的知识很容易迷失。1)第一类包括了标准参数。顾名思义,标准参数中原创 2022-04-05 14:56:58 · 2915 阅读 · 0 评论 -
JVM内存溢出解决方案
1. Java 堆空间发生频率:5颗星造成原因无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用,对象无法被 GC 回收 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上结束队列的增长解决方案使用 -Xmx 增加堆大小 修复应用程序中的内存泄漏2. GC 开销超过限制发生频率:5颗星造成原因Java 进程98%的原创 2022-04-05 14:51:23 · 417 阅读 · 0 评论 -
JVM调优参数、方法、工具以及案例总结
垃圾回收有关参数参数部分,这儿只是做一个总结,更详细更新的内容请参考Oracle官网:JVM的命令行参数参考处理器组合参数关于JVM垃圾处理器区别,参考:JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比-XX:+UseSerialGC = Serial New (DefNew) + Serial Old适用于小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器-XX:+UseParNewGC = ParNew + SerialOld这个组合已转载 2022-04-05 14:41:45 · 373 阅读 · 0 评论 -
数据库之互联网常用分库分表方案
一、数据库瓶颈1、IO瓶颈2、CPU瓶颈二、分库分表1、水平分库2、水平分表3、垂直分库4、垂直分表三、分库分表工具四、分库分表步骤五、分库分表问题1、非partition key的查询问题(水平分库分表,拆分策略为常用的hash法)2、非partition key跨库跨表分页查询问题(水平分库分表,拆分策略为常用的hash法)3、扩容问题(水平分库分表,拆分策略为常用的hash法)六、分库分表总结七、分库分表示例一、数据库瓶颈↑不管是原创 2022-04-05 13:55:59 · 187 阅读 · 0 评论 -
Java中死锁系列问题及其解决方案
1、简介在遇到线程安全问题的时候,我们会使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致锁顺序死锁(Lock-Ordering Deadlock)。或者有的场景我们使用线程池和信号量来限制资源的使用,但这些被限制的行为可能会导致资源死锁(Resource DeadLock)。这是来自Java并发必读佳作 Java Concurrency in Practice 关于活跃性危险中的描述。 我们知道Java应用程序不像数据库服务器,能够检测一组事务中死锁的发生,进而选择一个事务去执行;在Java原创 2022-04-05 13:43:47 · 3114 阅读 · 1 评论 -
数据库与REDIS缓存数据一致性解决方案
数据库与缓存读写模式策略写完数据库后是否需要马上更新缓存还是直接删除缓存?(1)、如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以马上更新缓存,但是如果对于那种写数据频繁而读数据少的场景并不合适这种解决方案,因为也许还没有查询就被删除或修改了,这样会浪费时间和资源(2)、如果写数据库的值与更新缓存的值不一致,写入缓存中的数据需要经过几个表的关联计算后得到的结果插入缓存中,那就没有必要马上更新缓存,只有删除缓存即可,等到查询的时候在去把计算后得到的结果插入到缓存中即可。所以一原创 2022-04-05 13:32:06 · 4727 阅读 · 1 评论 -
分布式事务解决方案
简述分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。解决方案在分布式系统中,要实现分布式事务,无外乎那几种解决方案。一、两阶段提交(2PC)两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。1. 运行过程1.1 准备阶段协调者询问参与者事务是否执行成功,参与者发回事务执行结果。原创 2022-04-03 18:05:52 · 262 阅读 · 0 评论 -
【高并发解决方案】如何设计一个秒杀系统
什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。秒杀系统场景特点秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增。 秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功。 秒杀业务流程比较简单,一般就是下订单减库存。秒杀架构设计理念限流:鉴于只有少部分用.原创 2022-04-03 17:39:11 · 224 阅读 · 0 评论 -
高并发解决方案
1.原因由于系统都是连接数据库的,但是一般最多数据库每秒只能支撑几千的并非,如果业务量激增,会导致系统宕机;因此需要从一下几点入手设计· 系统拆分· 缓存· MQ· 分库分表· 读写分离· 搜索2.系统拆分将一个系统进行功能拆分,如现在流行的微服务,每个服务连接的数据库分开,分开部署。这样可以将压力进行拆分,缓解因为网络和数据库导致的高并发3.缓存大部分场景下,都是查询多余插入更新,也就是读多写少。因此设计时对常用的查询内容必须进行缓存,查询时先查缓存,再查数据库原创 2022-04-03 17:36:10 · 1507 阅读 · 0 评论