Neohope's Blog http://www.neohope.com I'm here to learn and share. Sun, 29 Nov 2020 15:33:23 +0000 en-US hourly 1 https://wordpress.org/?v=5.6.2 一次MacOS升级引发的灾难 http://www.neohope.com/2020/11/29/%e4%b8%80%e6%ac%a1macos%e5%8d%87%e7%ba%a7%e5%bc%95%e5%8f%91%e7%9a%84%e7%81%be%e9%9a%be/ http://www.neohope.com/2020/11/29/%e4%b8%80%e6%ac%a1macos%e5%8d%87%e7%ba%a7%e5%bc%95%e5%8f%91%e7%9a%84%e7%81%be%e9%9a%be/#respond Sun, 29 Nov 2020 14:05:43 +0000 http://www.neohope.com/?p=3874 一、上周帮老婆大人把MacOS从Mojave升级到了Catalina,然后悲剧发生了。 任何需要截屏、屏幕共享或屏幕录制的应用都不能使用了,具体表现为: 1、配置-》安全与隐私里,多了一个选项”屏幕录制/Screen Recording”,里面列表是空的。 2、快捷键录屏是可以的 3、打开QuickPlayer,录制屏幕,提示之前禁用过屏幕录制,要求去修改权限;但由于列表是空的,根本无法做任何操作 4、其他APP,如微信、腾讯会议什么的,提示要增加权限,但“屏幕录制”里还是空的。 二、网上找了一下,无论国内国外,都有一些用户遇到了这个问题。尝试了一些建议的方法,搞不定。 三、于是打电话给Apple,一位妹子远程视频帮忙处理了很久,把能重置配置的方式都用了,还是不行。最后建议我重装系统。 四、重装,没任何变化。 五、把系统升级到了Big Sur,好歹有了一点儿进展: 1、配置-》安全与隐私里,”屏幕录制/Screen Recording”,里面列表是空的,但是新增任何APP都无效 2、快捷键录屏是可以的 3、QuickPlayer录制屏幕是可以的 4、其他APP,如微信、腾讯会议什么的,提示要增加权限,但“屏幕录制”里还是空的。 六、找了好长时间,最后终于解决了,步骤如下: 1、重启系统,听到提示音时,按下Command+R,进入恢复模式 2、恢复模式下,开启Terminal,禁用SIP服务 (system integrity protection) 3、重启系统,进入正常模式,重命名tcc.db文件 4、重启系统,进入恢复模式 5、恢复模式下,开启Terminal,启用SIP服务 (system integrity protection) 6、重启系统,进入正常模式 7、你会发现问题解决了 整体来说,这应该是MacOS升级的一个Bug,出现频率并不高,而且横跨两个大版本至今没有解决。 (也可以这么说,Big Sur解决问题的方式只是把QuickTime加白名单了,根本没有解决根本问题;或者说解决问题的Apple程序员可能根本没有定位到问题产生的原因) 我自己解决这个问题花费了4个小时以上,如果没有编程经验的普通用户遇到,估计只能格式化重装了,希望Apple可以出个工具,解决此类问题,节约大家的时间。

The post 一次MacOS升级引发的灾难 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/11/29/%e4%b8%80%e6%ac%a1macos%e5%8d%87%e7%ba%a7%e5%bc%95%e5%8f%91%e7%9a%84%e7%81%be%e9%9a%be/feed/ 0
记一次Excutor引发的生产故障 http://www.neohope.com/2020/11/28/%e8%ae%b0%e4%b8%80%e6%ac%a1excutor%e5%bc%95%e5%8f%91%e7%9a%84%e7%94%9f%e4%ba%a7%e6%95%85%e9%9a%9c/ http://www.neohope.com/2020/11/28/%e8%ae%b0%e4%b8%80%e6%ac%a1excutor%e5%bc%95%e5%8f%91%e7%9a%84%e7%94%9f%e4%ba%a7%e6%95%85%e9%9a%9c/#respond Sat, 28 Nov 2020 15:21:18 +0000 http://www.neohope.com/?p=3877 当时看到《阿里巴巴Java编码规范》时,我感觉这里面说的不是大家都该知道的事情吗?真有必要汇总个规范出来? 出来混,总要还的,最近在老项目上就遇到了。 我们有两个服务,遗留项目,代码写的实在是不敢恭维。 用量其实不大,或者说偏小,但很默契的每两周挂一次,到今天是第三次了。 第一次OOM(没定位到根本问题): K8S网络组件异常,DNS解析失败,和架构一起排查后,发现问题如下: 1、系统原来使用过RabbitMQ,后来代码注释了 2、但POM中,还是有MQ的引用,别的不会做,但会启动MQ的监听 3、结果有一天K8S网络组件异常,DNS解析失败 4、MQ的心跳包瞬间起了几千个线程,连接找不到的MQ Server 5、服务挂了 推断的问题链路为: DNS无法解析-》MQ心跳包不断起线程,而且没有连接池-》线程耗尽内存-》OOM-》服务挂掉 解决方法: 在POM中,干掉了MQ的引用,以为问题被修复了。 第二次OOM(大意了): 1、表现仍是K8S网络组件异常,DNS解析失败 2、架构感觉容器DNS解析不了应该运维去查 3、只好拉上运维查,运维也比较给力,很快把日志给出来了 4、但是系统OOM时,并没有生成镜像,架构建议添加JVM参数,结果和运维排查后发现JVM参数已经加了,OOM应该有Dump啊 5、最后的结论是,非常规问题,等下次发生再解决 6、这个时候,已经感觉怪怪的了,问题根源根本没有找到啊,但大家都忙着机房搬迁,就没能跟下去(我的问题) 推断的问题链路为: DNS无法解析-》不断起新线程去连接-》线程耗尽内存-》OOM-》但没有Dump文件-》无法定位问题 解决方法: 碰运气,等下一次OOM生成Dump文件?我当时咋想的呢 第三次OOM(真的解决问题了吗?): 1、感觉不对劲啊,为什么总是两周挂,于是拉取了日志 2、日志上没看出什么来 3、仍然没有OOM的Dump 4、jstack一看线程,傻眼了,一堆线程在waiting on condition 5、赶快看相关源码,居然是用了Excutor,然后线程和队列都是默认的 6、你懂的,线程数和队列默认几乎都是无限的,参数设置错误,导致线程池根本不会服用原来的工作线程 7、服务挂掉是早晚的事情 推断的问题链路为: DNS无法解析-》不断起新线程去连接-》线程耗尽内存-》OOM-》但没有Dump文件-》无法定位问题 解决方法: Continue reading 记一次Excutor引发的生产故障

The post 记一次Excutor引发的生产故障 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/11/28/%e8%ae%b0%e4%b8%80%e6%ac%a1excutor%e5%bc%95%e5%8f%91%e7%9a%84%e7%94%9f%e4%ba%a7%e6%95%85%e9%9a%9c/feed/ 0
记一次PG引发的生产故障 http://www.neohope.com/2020/10/01/%e8%ae%b0%e4%b8%80%e6%ac%a1pg%e5%bc%95%e5%8f%91%e7%9a%84%e7%94%9f%e4%ba%a7%e6%95%85%e9%9a%9c/ http://www.neohope.com/2020/10/01/%e8%ae%b0%e4%b8%80%e6%ac%a1pg%e5%bc%95%e5%8f%91%e7%9a%84%e7%94%9f%e4%ba%a7%e6%95%85%e9%9a%9c/#respond Thu, 01 Oct 2020 06:22:32 +0000 http://www.neohope.com/?p=3871 前几天,突然收到报修,一个文件接收服务突然宕了。 我们运维同事很快就进行了重启,此时怪异的事情发生了: 重启服务后,服务一会儿就没响应了,端口可以通,文件全部上传失败,没有任何异常日志输出。 那就排查吧: 1、PG数据库连接正常,无死锁,表空间正常,数据查询秒回 2、服务配置几个月都没人改过,CPU、内存、存储、IO、网络,全部正常 3、上传客户端日志输出,显示其工作正常 4、只有文件接收服务,没有响应,也没有日志输出 初步判断,文件接收服务出问题了。 于是,新开一个云主机,重新安装服务,仍然无响应。 然后,拷贝了一个正常工作的主机,修改配置后,仍然无响应。 来来回回折腾了几个小时,还是不行。 无奈之余,试了一下向PG数据库插入数据,我去,几十秒都没有响应。 赶快问DBA,原来是做了高可用,主从库数据同步,从库异常了,导致主库可读不可写。 众人皆表示无奈,重启从库,问题解决。 其实,一开始就排查数据库了,但由于是生产库,只试过查询,没有试过写入。 但是,我们都大意了: 1、服务日志,输出不够详细,就算DEBUG打开,也不知道数据进行到哪一步了,这个最坑 2、没有正确的设置超时时间,原因是接收文件后,写入数据库一直在等待,服务日志没有任何数据库异常 3、数据库监视软件,只做了主库监视,根本没做从库监视 4、数据库主从配置,本应该是异步,但现在配置成了同步 5、没有监视主从库同步的情况 6、生产库,不敢轻易进行写操作,只看了查询效率及死锁,没有看慢语句 就这样一个小问题,绕过了层层监控机制,让问题排查十分困难,花费了大量的人力。 反思起来,如果只是为了记录日志而记录日志,但日志不能反应服务状态,那不如不记;如果只是为了监控而监控,但监控不到位,那不如不监控。 我们日常做事情,也是同样的道理,细节是魔鬼,把该把控的把控好了,才能提升效率,得到想要的结果。

The post 记一次PG引发的生产故障 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/10/01/%e8%ae%b0%e4%b8%80%e6%ac%a1pg%e5%bc%95%e5%8f%91%e7%9a%84%e7%94%9f%e4%ba%a7%e6%95%85%e9%9a%9c/feed/ 0
快速提升单元覆盖率 http://www.neohope.com/2020/09/19/%e5%bf%ab%e9%80%9f%e6%8f%90%e5%8d%87%e5%8d%95%e5%85%83%e8%a6%86%e7%9b%96%e7%8e%87/ http://www.neohope.com/2020/09/19/%e5%bf%ab%e9%80%9f%e6%8f%90%e5%8d%87%e5%8d%95%e5%85%83%e8%a6%86%e7%9b%96%e7%8e%87/#respond Sat, 19 Sep 2020 08:15:03 +0000 http://www.neohope.com/?p=3865 最近到新公司,接手了几十个老项目。由于项目特殊需要,需要快速将一个模块的单元测试覆盖率提升到80%以上。 怀着忐忑的心情看了一下,该模块居然还有一个单元测试,整体覆盖率为0,欲哭无泪啊。 手工写是来不及了,那就想办法自动生成吧。找了一下,最终决定采用EvoSuite。 EvoSuite有多种方式可以配置,包括命令行模式、Maven插件模式以、Eclipse插件模式、IDEA插件模式等。 一、maven模式 1、修改POM文件,在对应位置添加相关内容 2、生成单元测试 二、命令行模式 1、下载evosuite-1.0.6.jar包 Downloads 2、收集项目依赖,把evosuite-1.0.6.jar也放入target/dependency文件夹 3、生成单元测试 三、Eclipse插件模式 在eclipse中安装evosuite插件,需要额外的插件地址: http://www.evosuite.org/update 四、单元覆盖率 1、插件安装 在eclipse中搜索并安装EclEmma Java Code Coverage插件,直接搜索即可 2、修改class loader配置 3、然后在项目上,右键,Coverage as-》JUnit Test 就可以看到覆盖率了哦。 我试过两个项目,一个简单的项目,覆盖率为95以上。 一个复杂一些的Web项目,覆盖率仅为30%左右。 五、总结 生成的单元测试,实际上没有什么维护性,如何用于生产环境,待探索。

The post 快速提升单元覆盖率 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/09/19/%e5%bf%ab%e9%80%9f%e6%8f%90%e5%8d%87%e5%8d%95%e5%85%83%e8%a6%86%e7%9b%96%e7%8e%87/feed/ 0
TiDB环境搭建 http://www.neohope.com/2020/06/27/tidb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba/ http://www.neohope.com/2020/06/27/tidb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba/#respond Sat, 27 Jun 2020 04:59:36 +0000 http://www.neohope.com/?p=3841 本节采用单机环境,搭建TiDB测试环境。 全程云环境部署,操作系统为CentOS7.6,用户为root。 1、修改ssh配置 2、安装tidb 3、新建cluster配置文件 4、应用cluster 5、查看cluster状态 6、mysql客户端操作tidb 7、查看tidb管理界面

The post TiDB环境搭建 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/06/27/tidb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba/feed/ 0
InfluxDB环境搭建06 http://www.neohope.com/2020/06/20/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba06/ http://www.neohope.com/2020/06/20/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba06/#respond Sat, 20 Jun 2020 15:07:35 +0000 http://www.neohope.com/?p=3831 本节用HTTP方式读写InfluxDB数据。 1、InfluxDB API路径 Endpoint Description /debug/pprof Generate profiles for troubleshooting /debug/requests Track HTTP client requests to the /write and /query endpoints /debug/vars Collect internal InfluxDB statistics /ping Check the status of your InfluxDB instance and your version of InfluxDB /query Continue reading InfluxDB环境搭建06

The post InfluxDB环境搭建06 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/06/20/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba06/feed/ 0
InfluxDB环境搭建05 http://www.neohope.com/2020/06/20/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba05/ http://www.neohope.com/2020/06/20/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba05/#respond Sat, 20 Jun 2020 13:51:23 +0000 http://www.neohope.com/?p=3795 本节给出了InfluxQL的函数清单。 1、InfluxQL函数清单 分类 函数 功能 Aggregations COUNT() 计数 Aggregations DISTINCT() 数据去重 Aggregations INTEGRAL() 数值曲线包含的面积 Aggregations MEAN() 平均数 Aggregations MEDIAN() 中位数 Aggregations MODE() 频次最高的数据 Aggregations SPREAD() 最大值于最小值时间的差 Aggregations STDDEV() 标准差 Aggregations SUM() 求和 Selectors BOTTOM() 返回最小的数据集 Selectors FIRST() 返回最旧的数据 Selectors LAST() Continue reading InfluxDB环境搭建05

The post InfluxDB环境搭建05 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/06/20/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba05/feed/ 0
InfluxDB环境搭建04 http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba04/ http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba04/#respond Sun, 14 Jun 2020 13:58:37 +0000 http://www.neohope.com/?p=3826 本节讲解InfluxDB的部分高级功能 时间序列数据处理的数据量会十分大,而且很多数据只是在一定时期内意义会更大一些,比如服务器性能日志。 所以,一般来说近期数据会按采样间隔全量储存,越远的数据,需要保存的采样间隔就会越大。 比如,服务器性能日志: 近一周的,可以按10s采样一次 近一月的,可以按5m采样一次 近三个月的,可以按1h采样一次 近半年的,可以按1d采样一次 近一年的,可以按1w采样一次 再之前的,可以删除 这样降低采样率的操作,在时间序列数据库中的应用场景很多,所以一般都会进行支持。 InfluxDB,采用了两个方法来解决这个问题: 通过Continuous Query定期降低采样频率 通过Retention Policy定期删除高频采样数据 1、Continuous Query 2、Retention Policy 3、新建数据库 4、删除数据库 5、删除series 6、删除series中数据 7、删除measurement 8、删除shard 9、删除measurement 10、删除measurement 11、杀死慢查询

The post InfluxDB环境搭建04 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba04/feed/ 0
InfluxDB环境搭建03 http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba03/ http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba03/#respond Sun, 14 Jun 2020 12:32:01 +0000 http://www.neohope.com/?p=3824 本节讲解InfluxDB的查询 1、普通查询 2、group by查询 3、分页查询 4、带正则表达式的查询 5、嵌套查询 6、SELECT INTO 7、整库复制

The post InfluxDB环境搭建03 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba03/feed/ 0
InfluxDB环境搭建02 http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba02/ http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba02/#respond Sun, 14 Jun 2020 11:59:38 +0000 http://www.neohope.com/?p=3777 本节讲解InfluxDB的安装及测试数据导入 1、InfluxDB安装 2、测试数据导入 3、查看数据库情况

The post InfluxDB环境搭建02 first appeared on Neohope's Blog.]]>
http://www.neohope.com/2020/06/14/influxdb%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba02/feed/ 0