- 博客(40)
- 资源 (1)
- 收藏
- 关注
原创 大海捞针-记一次排查内存溢出事件
据实施人员交代,这个巨型项目在2020-2021年平稳运行了一年,元旦之后,频繁报内存溢出,有时几天一次,有时一天几次,完全摸不到规律。而且堆内存已设置最大4G。OK,开整!首先,堆转储文件已不可得,在weblogic增加jvm参数,下次OOM时即可获得堆转储文件。-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath一边等问题复现,一边从程序的角度排除。程序有无定时任务?有!但挨个看了,quartz的定...
2022-01-14 14:29:46 815
原创 防止开发者不关DB的策略及实践
笔者的工作内容主要是研发框架,即提供了一整套平台框架(登陆模块、菜单模块、组织机构模块、权限模块、流程、表单、润乾。。。),其中业务程序开发模块供业务开发者进行二次开发使用。通常,业务开发者只需要在引导页面输入一些表名、字段名等信息,就可以完整地生成一个程序页面(列表、维护、树型页面等)。但是,业务需求总是千差万别的,平台框架不可能满足所有现场的特殊需求,这时候,就需要业务开发者在我们限定的方案内进行二次开发。举个栗子,下图是平台框架中自动生成的新建维护页面;比如现在有个特殊需求,在打开新建维护页面的时
2021-03-10 18:27:41 195 1
原创 记一次SQL性能优化过程-索引并非多多益善
最近公司的一个项目,出现数据库占用CPU飙升,导致所有SQL执行缓慢,系统几近崩溃,废话不说来看排查经过吧
2021-03-05 09:58:42 126 2
原创 记一次我的技术分享-nginx的使用及案例分析
先给大家分享一套非常有用的nginx学习视频,共100集,每集几分钟讲清一个知识点,非常nice。大家扫码关注一下公众号 智程科技 ,回复 “nginx100” 即可免费领取哦 好了,言归正传。我现在的公司有一个非常优良的传统,那就是每个员工都会定期地分享技术干货,互相拓宽大家的知识维度。一般是以讲解加问答的形式,内容可以是一种新技术、一次性能调优的过程、甚至是一段优美的代码,内容不限制,时间一小时。其实,我第一次的技术分享是在19年5月份,但由于本人比较懒,一直没记录...
2021-03-05 00:09:36 454 2
原创 OutOfMemoryError 与 StackOverFlow 的底层逻辑
在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。OutOfMemoryError 是内存溢出,jvm把所有的对象实例以及数组都要在堆上分配,如果分配不下就会报此错误。//OutOfMemoryError 示例:List<Object> lst = new ArrayList<Object>();while(true) { Object obj = new Object(); lst.add(obj...
2021-12-29 19:03:08 819
原创 谈谈websocket在Java项目中的应用
最近,笔者在给公司的产品做一个在线用户聊天的功能,用到了websocket技术,这里做一下归纳和总结。 在HTTP 协议中,所有的请求都是由客户端发起的,由服务端进行响应,服务端无法向客户 端推送消息,但是在一些需要即时通信的应用中,又不可避免地需要服务端向客户端推送消息,传 统的解决方案主要有如下几种。 1、轮询:简单,弊端就是会服务器会处理大量的无效请求; 2、长轮询:轮询的升级版,不同于传统轮询,在长轮询中,服务端不是每次都会立即响...
2021-12-22 19:42:52 2137
原创 监测ORACLE服务脚本
@echo offrem 定义监测的服务set srvname="OracleServiceORCL"echo.echo ====================================================echo == 查询计算机%srvname%服务的状态 =========echo == 如发现服务停止,则立即启动 ======================echo ================================================.
2021-12-15 15:21:13 1420
原创 应用服务占用CPU过高情况排查
问题描述(1)业务开发人员在启动项目时,会较高概率的出现cpu满载且一直无法停止的问题。任务管理器可以看到javaw.exe占用率为90%以上(2)当启动项目时debug项目时,也会出现异常的卡顿,且能发现cpu占用率在稳步上升。解决思路1.尝试重现问题后,通过jvisualvm(jdk8中自带,后续版本被移除,但是可以兼容使用)工具观察堆、cpu运行的状态,能看出cpu是一直处于高负荷运行状态,且堆内存占用不大,GC线程也未占用cpu。可以判断是项目中部分线程一直在运行导致了cpu满载。2.jps
2021-12-13 17:02:28 2667
原创 nginx的容错与转发机制
问题:当一个请求经过nginx转发,快要达到A服务器却未到达时,A突然宕机,这种情况如何避免呢?我在另一篇文章了提到了nginx的重试机制,不过这个机制存在一定局限性,比如必须是一台机器返回了规定了Http状态码,nginx才能根据此状态码做出将请求转发到另一台机器的的行为。而宕机则是A服务器完全没有反应,无法返回任何信息。 nginx自己带的健康检测似乎能避免这个问题,但是它是被动检测的,总会有几个请求落到了已经不可用的服务器上,nginx才知道这台服...
2021-08-31 17:30:52 710
原创 处理集群问题的一些思路
1、妙用nginx的重试机制 nginx的上有服务器为A和B,当请求经过nginx转发到达A时,A突然宕机后,该怎么让请求继续得以执行成功返回响应呢?这就需要利用nginx的重试机制。 重试就是再次尝试,容错的一种策略。当nginx收到A服务器的响应或者压根就没有响应时,nginx会根据默认或定义的配置,再将请求转发给其他节点,以顺利执行。官方API:Syntax: proxy_next_upstream error | timeout | invalid_hea...
2021-08-31 17:08:57 384
原创 修改pro文件,tomcat自动重启怎么办?
前些日子碰到一个很奇怪的问题:现象是,请求产品中的一个初始化接口,外置tomcat就会自动重启,报以下错误16-Jul-2021 16:11:01.332 警告 [Catalina-utility-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbcWeb应用程序 [ROOT] 注册了JDBC驱动程序 [com.alibaba.druid.proxy.DruidDriver],但在Web应用程序停止时无法注
2021-08-01 23:13:54 883
原创 Java工具类之读取jar包中配置文件
如何从jar中读取类如XML的配置文件呢?而且要兼容读取classPath下的配置文件,且读取顺序要优先于jar包。从classPath下读取大家都知道,通过class.getResource()就能获取class的绝对路径,读取非常轻松。而从jar中读取则需要支持的API,楼主翻阅了网上的资料,有URL、JarFile等。但这意味着方法里必须先读取classPath下文件,如没有则再读取jar中文件,这就显得很不优雅。后来找到了一种优雅的API:ResourcePatternResolver翻
2021-07-10 12:25:45 1927
原创 核心代码之版本管理与更新推送
需求:平台的核心代码,只有打成加签的jar才能不易被个别项目现场所覆盖,但他们想扩展功能怎么办?最好的方法就是面向接口编程,预留接口给他们二次开发,但产品当初的技术框架并未如此设计,所有现在只能退而求其次了。一.场景模拟1.比如,产品上Business.java中,方法会初始化有效状态作为过滤条件但苏州现场情况特殊,登录公司不是总公司才要设置有效状态,那么要修改代码2.比如,产品上的表单计算service但现在某泰州现场希望增加预执行函数的逻辑,则也可能某上海现场希望添加后置
2021-03-31 19:42:45 172
原创 雪花算法增强策略-扩充位数
背景目前平台采用雪花算法作为主键生成策略。雪花算法有以下优点:毫秒数在高位,自增序列在低位,整个ID都是趋势递增的。 不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的。 可以根据自身业务特性分配bit位,非常灵活需求及目标原有的截取IP方式,很大可能性出现重复; 需要将项目代码(AA~99)加入主键生成策略,而项目编码可能组合为1296个,需要占用至少11位的长度方能满足需求; 基于以上需求,共计需要1(首位)+41(时间戳差值)+11(项目编...
2021-03-27 17:15:21 600
原创 项目现场的疑难杂症之攻略
从产品出厂到部署,再到运营,期间各种疑难杂症,且看如何处理1.应用卡顿问题问题描述: 现场打开页面极为卡顿,打开一个页面需要10s以上排查思路:卡顿问题可能由于多重问题引起,首先应排除环境问题,如网络卡顿延迟、网络不通等情况,环境问题排查之后,在考虑是否是代码问题。环境问题可以根据一次请求的各个方面耗时来判断,首先可通过浏览器控制台中请求的Timing来判断。Timing中的ContentDowload时间过长,判断为带宽过小。问题定位:该服务器带宽过小,只有1M,导致网络传输过慢。2.
2021-03-25 20:28:41 206
原创 流程绘制期参考与设计(2)
其实不光参考了这两个产品,对于其他产品也有借鉴。我们设计的初心是为了极大地减少用户配置流程的步骤,恨不得用户新建个流程名录,再绑定个业务程序即可,但实际上并做不到这样,只能每一种功能都要斟酌便捷性。下面就贴出我们最终设计出来的已经实现了的流程绘制期界面。1、整体效果2、节点配置3、连线配置4、同步节点...
2021-03-19 12:58:25 92
原创 刨根问底-修改源码之 设置springboot下quartz启动开关
之前有篇博客说到应用集群(2)-避免定时任务重复执行策略,现在记录一下做法吧。众所周知,springBoot是自动装载的,只要你导入依赖,它就会运行,这很好,但又带来了麻烦因为我们应用服务和定时任务服务是同一个项目,只是出厂的时候要分开部署,他们公用一个application.pro 和 一个quartz.pro文件,所以需要一个开关控制 quartz的启动目前,当启动我们项目的时候,会自动蹦出这些quartz启动信息。[INFO ] [2021-03-19 11:57:28,646]..
2021-03-19 12:49:01 2285 2
原创 Redis集群搭建手册
给公司的某个项目现场写过的Redis集群搭建手册,好记性不如烂笔头,记下来。Redis集群最少需要6个节点,3主3从,可以分布在一台或者多台主机上。本例是在虚拟机上创建集群,不同的端口表示不同的redis节点,如下:主节点:127.0.0.1:8001 127.0.0.2:8003 127.0.0.3:8005从节点:127.0.0.1:8002 127.0.0.2:8004 127.0.0.3:8006以一台虚拟机为例:1.在/usr/local/src/redis-5.0.5/下
2021-03-18 21:03:35 141
原创 流程绘制期参考与设计(1)
笔者现在的公司有自主研发的一套完整的流程引擎,包括流程绘制、流程运行等。随着7代产品的进展,设计新的流程绘制页面也提上了日程。笔者参考了较为主流的流程引擎服务商,以下便是一些归纳和总结。产品一:*******一.界面及操作 1、整体效果(浦发银行诉讼费用申请流程)2、参与人的界定方式与处理方式种类丰富(一个节点参与人仅有一个处理方式)3、字段权限4、事件处理5、高级设置6、连线7、催办督办/强力调整8...
2021-03-18 20:58:19 94
原创 Java与网络安全关联的问题及解决办法
1、私有链接:前端代码里有私有链接,如172.16,即便被注释,也会被利用,应该用域名代理2、安全内容策略:未配置安全内容策略,网页存在被挂载第三方的链接的风险,解决办法:配置全局安全内容策略如:response.addHeader("Content-Security-Policy","default-src'self'https:<ahref="http://api.map.baidu.com/">http://api.map.baidu.com</a>...
2021-03-11 17:15:18 576 1
原创 解决spring下@Autowired注解注入的对象为null的问题
开发过程中,在MaintBusiness.java中注入一个对象:@AutowiredprivateRegionServiceregionService;使用的时候,发现这个service为null,将MaintBusiness加上注解@Component交给Spring管理,仍不能解决问题。追随代码,发现调用的时候是classforName的newInstance实例化的MaintBusiness,和new的差不多。问题很明确,MaintBusiness是被反射调用的,并没有被sp..
2021-03-11 16:59:41 2427 4
原创 spring注入静态对象
private static ProcessSdkService sdkService;@Autowiredpublic void setSdkService(ProcessSdkService sdkService){ //静态变量通过set方法注入 BpmUtils.sdkService = sdkService;}
2021-03-11 16:55:54 182
原创 在Java代码中调用JS的方法
FileReader fileReader = new FileReader(new File(url));//url js为文件路径ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("javascript");engine.eval(fileReader);if(engine instanceof Invocable){ Invoc.
2021-03-11 16:47:26 292
原创 mybatis批量执行创建表与索引
最近做7代产品的国际化功能,需要批量创建表与索引,这里总结了一下用法,大家可以参考一下,有更好的写法也可一起探讨下:--可惜一个create table 语句中并不能包含创建普通索引的语句,所以只能采用这种写法<update id="createMultiLangTableSql" databaseId="oracle"> <![CDATA[ DECLARE lsql varchar2(4000); BEGIN lsql := '
2021-03-09 16:41:02 1976 1
原创 时间合并算法
需求:任意几段时间,比如 9:00-10:00,11:00-12:00,9:30-11:30,自动输出9:00-12:00;比如 9:00-10:00,11:00-12:00,9:30-10:30,自动输出 9:00-10:30,11:00-12:00//贴出核心部分代码,供大家参考static <T> T combineDate(List<TimeType> list) { Stack<Long> s = new Stack<Long>();
2021-03-08 19:45:23 409
原创 nginx集群转发到80端口出现问题
现象:nginx配置转发到80端口,大量的静态文件无法加载,但是配置非80端口就可以;解决:配置中假如“proxy_http_version 1.1;proxy_set_header Connection”即可;分析:尝试寻找80端口与非80端口的区别,在后台打印日志输出http请求头等对比,未发现异常,后查阅大量资料后发现,80端口会被默认识别成HTTP协议,而非80端口会被识别成TCP协议处理。HTTP请求会默认自动释放连接,导致nginx出现类似远程服务器关闭了连接这个报错。修改方案,将HTT
2021-03-07 19:44:57 547
原创 防SQL注入研究与平台应用方案
防SQL注入研究与平台应用方案一、解决SQL注入的常见方案1.1 对SQL参数进行检测与转义 检测的具体内容如下: 1.1.1SQL参数的长度、类型、范围的检测,如参数是否为数值,时间参数是否在一个时间区间之内、字串参数长度是否小于8等,根据具体业务规则定义。 1.1.2SQL参数中特殊字符、SQL关键字的检测,如单引号{‘},分号{;},注释符{--},select,update,insert等。 1.1.3SQL参数16进制的检测,如hex(0xff0...
2021-03-05 17:38:37 119 1
原创 Oracle误删数据恢复
把SYS_ORGANIZATION_INFO 表名替换就可以了,可将该表数据恢复到特定时间之前。select * from SYS_ORGANIZATION_INFO as of timestamp to_timestamp('2017-05-30 08:00:00', 'yyyy-mm-dd hh24:mi:ss');alter table SYS_ORGANIZATION_INFO e
2017-06-15 10:33:42 267
docker启动logstash报错
2023-09-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人