最近线上发生的两个坑爹锅

最近由于在技改,发生了不少问题,前文中说的缓存穿透只是其中之一,想了想,虽然都是比较简单的问题,但是应该实际中还是有不少人碰到过,这些问题看似很简单,但是你绝对应该踩过。

==和equals

关于==和equals区别,我相信稍微做过一两年开发的同学都应该很清楚,可是,然而,这个坑在很多开发的时候仍然频繁出现,为什么?因为有时候有的同学认为没什么区别,就用==吧,然而,一些意外总是如期而至。

不久前,由于线上RPC框架切换,我们就发生了一点小问题。

本来,线上的接口是这样定义的:

image

然后,接口查询中使用到了一个枚举类型,根据id获取枚举值,只不过这里使用的是==号来判断。

image

调用方的写法:

image

本来,这个代码在线上跑了两年了,一点问题没有,怎么就突然不行了呢?

但是,切换框架之后,这个接口报错了,当时我也看了这个地方半天,猜测是这里的问题,但是想了想貌似又不应该啊。

结果最后发现,原来的RPC框架传输中使用的是valueOf,从缓存中取值,加上自动装箱拆箱,判断可以通过。但是,新的框架使用的是new Byte(),所以这个老代码就永远无法通过了,因为这是一个新的对象。

看看这个测试的结果。

image

后面,通过安装Alibaba Java Coding Guidelines插件统一扫描所有代码,还又发现了一个坑爹的问题。

这个写法又不太一样,这个枚举只是单纯的把code成员变量定义成了byte基础类型,不是包装类型。这样,代码用==判断又都OK了。

坑爹1

想象一下,因为是基础数据类型,拆箱后==判断当然是通过的。

还有更奇葩的写法,成员变量是Byte包装类型,getEnumByCode(byte code)这里用的又是基础类型,当然,这种写法也能判断通过。

坑爹2

所以,心累... ...

最后,我想再补充一下关于基础数据类型缓存的知识。能用==判断的原因也都是依赖于缓存的原因。

数据类型 包装类型 缓存类型 缓存值范围
byte Byte ByteCache -128~127
short Short ShortCache -128~127
int Integer IntegerCache -128~127
long Long LongCache -128~127
char Character CharacterCache 0~127

最后,奉劝大家一句,千万,千万,在项目中判断基础数据类型都用equals,因为就算这段代码你很确信现在是对的,然而鬼都不知道后面会发生什么!不要抱有侥幸心理。

日志打满

项目技改上线后不久,发现接口成功率直接跌0(跌0的告警监控必须得有,不然死都不知道怎么死的)。排查了很久,看其他都是正常的,最后发现GC耗时狂增,登录服务器一看,居然是硬盘被打满了。

image

然后果断去看日志,因为我们的硬盘实际上很小,先怀疑日志,果不其然,日志炸了。通过ls -lht查看文件大小。

image

通过rm -rf删除后发现硬盘空间并没有释放。正常情况下是不会出现这个问题的,但是如果文件被锁定或者有另外的进程在向文件写数据的话就会有问题了。

在Linux中,一个文件在文件系统中存放包含两个部分:

  1. 指针部分:指针位于文件系统的meta-data中,在将数据删除后,这个指针就从meta-data中清除了。
  2. 数据部分:而数据部分存储在磁盘中。

像上面的情况,虽然我们删除了service.log,但是由于进程锁定,指针部分没有从meta-data中删除,所以也就看到存储空间没有释放的问题。

解决办法有两种:

  1. 使用lsof -n |grep delete查看什么进程在写service.log,通过命令发现是我们的java进程在一直写文件,然后通过后台工具直接重启应用,重启之后发现恢复正常。

  2. 清空日志文件,执行命令echo "">/service.log,这个方法可以立刻释放磁盘空间,进程继续写入日志也不会受到影响。

本篇文章由一文多发平台ArtiPub自动发布

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容