范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java程序CPU使用率过高问题排查与修复

  问题现象:CPU 负载过高
  我们线上的java系统,时不时会发生 CPU 负载过高的现象。问题排查
  应对 Java 程序导致的 CPU 使用率过高这一问题,GitHub 上有现成的解决方案:show-busy-java-threads。https://github.com/oldratlee/useful-scripts wget --no-check-certificate https://github.com/oldratlee/useful-scripts/archive/release-2.x.zip unzip release-2.x.zip
  登录上机器,在 CPU 使用率高时候,执行 show-busy-java-threads 脚本./show-busy-java-threads
  摘选其中的一些输出如下:The stack of busy(25.0%) thread(20239/0x4f0f) of java process(248927) of user(jenkins): "Handling GET /job/jenkins-test-job/api/json from 172.168.1.1 : qtp1641808846-3127" #3127 prio=5 os_prio=0 tid=0x00007f7380014000 nid=0x4f0f runnable [0x00007f722c392000]    java.lang.Thread.State: RUNNABLE         at java.util.Arrays.copyOfRange(Arrays.java:3664)         at java.lang.String.(String.java:207)         at java.lang.String.substring(String.java:1933)         at net.sf.json.util.JSONTokener.matches(JSONTokener.java:110)         at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:912)         at net.sf.json.JSONObject.fromObject(JSONObject.java:156)         at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:348)         at net.sf.json.JSONArray._fromJSONTokener(JSONArray.java:1131)         at net.sf.json.JSONArray.fromObject(JSONArray.java:125)         at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:351)         at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:955)         at net.sf.json.JSONObject.fromObject(JSONObject.java:156)         at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:348)         at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:955)         at net.sf.json.JSONObject.fromObject(JSONObject.java:156)         at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:348)         at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:955)         at net.sf.json.JSONObject.fromObject(JSONObject.java:156)         at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:348)         at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:955)         at net.sf.json.JSONObject._fromString(JSONObject.java:1145)         at net.sf.json.JSONObject.fromObject(JSONObject.java:162)         at net.sf.json.JSONObject.fromObject(JSONObject.java:132)         at sam.Sam.sendRequestReturnJson(Sam.java:517)         at sam.Sam.getPermissionByUser(Sam.java:225)         at sam.Sam.checkUserPermissionLocal(Sam.java:243)         at com.michelin.cio.hudson.plugins.rolestrategy.PermissionCache.getPermissionSam(RoleMap.java:155)         at com.michelin.cio.hudson.plugins.rolestrategy.PermissionCache.getPermission(RoleMap.java:106)         at com.michelin.cio.hudson.plugins.rolestrategy.RoleMap.hasPermission(RoleMap.java:220)         at com.michelin.cio.hudson.plugins.rolestrategy.RoleMap.access$000(RoleMap.java:166)         at com.michelin.cio.hudson.plugins.rolestrategy.RoleMap$AclImpl.hasPermission(RoleMap.java:569)         at hudson.security.SidACL._hasPermission(SidACL.java:70)
  从上面的输出可以看到,25.0% 的 CPU 资源在处理 Handling GET
  /job/jenkins-test-job/api/json from 172.168.1.1 这个请求。
  运维同学根据这个 ip ,定位到发起请求的是某同学 A。这个同学在跑一些定时任务,定时拉取 job 的执行结果。
  问题是当我直接访问这个接口:
  /job/jenkins-test-job/api/json 时,返回并不慢,几乎很快就可以返回。问题应该不是这个接口的问题。
  我们接着从 ./show-busy-java-threads 输出往下看:看到其中有问题的调用栈:at net.sf.json.JSONObject.fromObject(JSONObject.java:132) at sam.Sam.sendRequestReturnJson(Sam.java:517) at sam.Sam.getPermissionByUser(Sam.java:225) at sam.Sam.checkUserPermissionLocal(Sam.java:243)
  看起来是这个 Sam 校验用户权限导致的 CPU 使用率过高,而接着看上面的代码
  net.sf.json.JSONObject.fromObject,这个是在做 json 的反序列化。
  通常来说,json 的序列化、反序列化都是比较费 CPU 的,更糟糕的是,这里用到的 json 序列化框架是 net.sf.json,而不是 Java 常用的 jackson 和 gson 等。
  直觉告诉我,肯定是这个 net.sf.json 反序列化引起的 CPU 使用率过高问题。
  备注:
  通过跟之前维护 jenkins 的同学了解到,他们基于 role-strategy 插件,重写了 jenkins 权限验证逻辑,用的就是 Sam 权限。翻看 sam 权限插件的代码,确实有用 net.sf.json 做 json 反序列化。
  到这里,定位到大概率是 Sam 权限插件的 net.sf.json 反序列化引起的问题。问题复现
  为了验证这个问题,我们拿到 Sam 权限插件的代码。找到出问题的关键代码:public void getPermissionByUser(String email) {     JSONObject params = new JSONObject();     params.put("user_email", email);     params.put("subsystem_id", SAM_JENKINS_SUM_SYSTEM_ID);      JSONObject res = sendRequestReturnJson(URL, "GET", params);     if (res.get("success").equals(true)) {         cacheUserPermission(params.getString("user_email"), res.getJSONObject("permission").getJSONObject(email).getJSONObject("SERVICE"));     } }  public static JSONObject sendRequestReturnJson(String endpoint, String method, JSONObject params) {     if (method.equals("POST")) {         return JSONObject.fromObject(sendPostRequest(endpoint, params));     } else if (method.equals("GET")) {         return JSONObject.fromObject(sendGetRequest(endpoint, params));     }     return new JSONObject(); }
  可以看到,这段代码会根据用户邮箱,发送 http 请求调用 Sam 系统,获取用户的权限数据,然后将数据反序列化成 JSONObject,即: JSONObject.fromObject(sendGetRequest(endpoint, params, token))
  在本地,通过复现 A 同学的请求,发现这个请求确实比较慢,而且费 CPU。通过 debug 得知,这个用户返回的 json 数据有 1M 左右,json 反序列化 CPU 打满。
  而通过其他用户请求,发现处理很快,返回的 json 数据也比较小。
  到这里,确认就是 net.sf.json 框架的反序列化性能问题,引起的 CPU 使用率过高。我们需要替换成其他高性能的 json 序列化框架。
  备选有:gson、jackson、fastjson等。fastjson 因为经常出安全漏洞,暂不考虑,我们考虑从 gson、jackson 选择一个。替换成 gson
  将之前的代码替换成 gson,代码如下:public void getPermissionByUser(String email) {     JSONObject params = new JSONObject();     params.put("user_email", email);     params.put("subsystem_id", SAM_JENKINS_SUM_SYSTEM_ID);      JsonObject res = sendRequestReturnJsonV2(URL, "GET", params);     if (res.get("success").getAsBoolean()) {         cacheUserPermission(params.getString("user_email"), res.getAsJsonObject("permission").getAsJsonObject(email).getAsJsonObject("SERVICE"));     }          }  public static JsonObject sendRequestReturnJsonV2(String endpoint, String method, JSONObject params) throws IOException {     if (method.equals("POST")) {         return GSON.fromJson(sendPostRequest(endpoint, params, token), JsonObject.class);     } else if (method.equals("GET")) {         return GSON.fromJson(sendGetRequest(endpoint, params, token), JsonObject.class);     }      return new JsonObject(); }
  重新编译权限插件后上线,再次查看 CPU 负载监控,发现 CPU 负载确实降下来了(05/13晚上 0 点左右上线的)。

诺基亚新E72渲染图3K分辨率E5屏,液态双1亿徕卡相机对角线布局诺基亚手机作为曾经的手机王者,就算已经跌下了神坛,依然还是有不少的粉丝簇拥。作为曾经的经典机型诺基亚E72,虽然是功能机但是依然有不少消费者愿意为之买单。如果诺基亚发布全新的E72iPhone13Pro与iPhone12Pro对比差异很明显目前iPhone13系列正处于供不应求的状态,想入手的朋友可以再等等,等到双十一入手更实惠。这一回,iPhone13Pro型号在规格方面与标准款机型拉开了距离,iPhone13PrAirPodsPro防丢模式升级,AirPods2让路新机惊现白菜价砸场苹果今天发布了其旗舰AirPodsPro和AirPodsMax音频产品的固件更新,极大地提高了其释放损失的能力。此前,Apple的FindMy程序支持搜索AirPods等无线耳机设这散热iPhone12都服了?2199的国产机游戏体验竟这么强如今手游已经逐渐成为现在年轻人交友娱乐消磨碎片时间的主要活动,与此同时,用户也越来越重视手机在游戏方面的体验,手机厂商也不断的优化自家产品的软硬件系统。像是近期发布的OPPOK9P任天堂NintendoSwitchOLED游戏机评测屏幕更大,还可以插网线虽然游戏机产品不会像苹果iPhone那样一年更新换代一次,但厂商往往会在两代游戏机之间推出某些升级产品。比如索尼的PlayStation4Pro或者微软XboxOneX,这些都是同三星GalaxyZFlip3热销,国产对标机型即将问世,华为出品在8月份,三星发布了新款折叠屏系列新机搭载骁龙888芯片的三星GalaxyZFold3和三星GalaxyFlip3,国行售价分别为14999元和7999元。近日,三星官方发布喜讯,华为太无奈了,P50刚上市就差评如潮,情怀还是输给了现实华为智能手机在国内已经积累起来了很好的口碑,很多人在买手机的时候,都是非华为不买,在他们心里,华为就是好手机的代表,当然还有一些人夹杂着一些情怀在里面。不管大家出于什么样的想法,国OPPOFindX3Pro摄影师版深度评测颜值担当,能拍能打,效果出众如果论颜值排名的话,我觉得OPPOFindX3Pro摄影师版绝对可以排在旗舰机里的前三。背部素皮和AG磨砂玻璃的结合独具匠心,黑白搭配,很有艺术气息,手感也好。196克的机身拿着轻iPhone13ProMax拿下DXO第一,华为和三星都得服气很多手机厂商现在对于DXO的相机评测基本上不怎么感冒了,比如三星,O,V现在都不送测,苹果更是从来不在乎这个榜单的评测结果。因为真正对自己实力有信心的厂商,无需得到其他机构的认可。2021双11手机推荐网友问题希望网速快,打算转5G,主要推荐安卓机。看了小米11ultra和Magic3iPhone13。担心骁龙888发热,不喜欢iPhone13棱角价位考虑40005000不玩游戏或将于年底发布!华为4G旗舰手机Mate50Pro重点配置参数爆料往年,华为会在9月份发布Mate系列年度旗舰,并且会搭载新一代的麒麟系列旗舰芯片。由于今年的特殊情况,麒麟处理器无法生产,华为新款旗舰手机也迟迟不能发布。但有消息称华为最新的Mat
我叫增值税,我的起征点又要变了!今天起,这是我最新的税率表2021年增值税又有哪些新改动?现行的最新税率表是多少?如何正确抵扣?3月1日起,这是最新的知识点!2021年增值税起征点要变了!从10万提高到15万一政府工作报告说,市场主体恢复NS2020年度盘点第三方游戏年货轮登陆桃太郎席卷日本前几天我们先后整理了NS2020年度盘点中的任天堂第一方游戏和上半年的第三方厂商作品,那么今天就让我们来继续盘点2020年七月到十二月来到Switch平台的第三方游戏吧。相较于上半蝉联日本八连冠,热卖200万份的桃太郎电铁是一款怎样的游戏?截止到1月10日,根据日本Fami通公布的实体游戏销量数据,桃太郎电铁昭和平成令和也是基本款当周在日本本土卖出了87087份,达成日本本土游戏销量八连冠,实体版游戏实体下载卡累计销一部小学生横穿日本的故事,世界末日俱乐部评测说来有趣,原定5月27日发售的世界末日俱乐部的实体卡带偷跑了近二十天的时间,我们也得以提前拿到卡带体验了这款游戏。这款由小高和刚与打越钢太郎共同开发的游戏在宣发阶段就吸引了不少玩家10月份美国会通过比特币ETF吗?牛市高潮即将来临?这2天,有2个新闻,连起来看,很有意思。1coinbase发布推文,称10月份SEC将会通过比特币ETF,但是很快就删除了推文。2SEC主席称,将会支持比特币期货ETF首先,我们要美国对加密货币中稳定币监管的思路?更为灵活且有益于创新今天看了一篇文章,是a16z投资机构的合伙人,对美国政府监管加密货币中的稳定币提出的一些建议。我觉得写得非常好。给大家解读一下。稳定币的定义波动较小的加密资产,主要是usdt,us接连拿下Q3季度9月国内手机市场销冠!绿厂都有哪些过人之处?放眼全球,国内智能手机市场的竞争可能是最激烈的。比如即使是全球销量第一的国际品牌三星,在国内市场中也出现了水土不服的情况,目前已处于Other,而绝大多数份额,都牢牢掌握在OPPO恭喜!增值税降了!31正式文件下达!增值税又有新规定重磅!小规模3减按1生活服务免增值税收派服务免增值税等多项疫情优惠政策延期!延期的日期也明确了!01hr1政策继续延长官方文件出炉财政部税务总局关于延续实施应对疫情部分税费优惠政策小米魅族华为ZUK一加集体降价,风暴多猛烈,也不要出手!这几天过年回来,对于手机行业最对于手机行而言,最明显的变动莫过于降价了。魅族刚刚宣布MX5降价至1499元,这边小米Note标准版就也杀到1499元。而华为方面,荣耀6Plus和最内账被查!2名90后财务被抓!国家终于出手最近,我在后台看到有人咨询我内账怎么做?这个问题也是很多企业的一个通病,外账拿来应付税务工商检查,内账给老板和股东看,但是很多时候会计都会忽视这其中的风险!其实我看到这个问题的时候财务总监卷走1900多万元公款,同事眼中的高富帅竟然是一名曾卷走公司700多万元的前科人员,出狱之后成了另一家公司的财务总监,重操旧业卷走公款1900多万元。化身财务总监卷走1900多万元公款2020年2月,江苏南京一家公司账上的19