watermark

Java问题定位之Java线程堆栈分析

纵然是瞬间 提交于 2020-08-15 03:42:25
采用Java开发的大型应用系统越来越大,越来越复杂,很多系统集成在一起,整个系统看起来像个黑盒子。系统运行遭遇问题(系统停止响应,运行越来越慢,或者性能低下,甚至系统宕掉),如何速度命中问题的根本原因是我们接下来讲的目的。本系列文章将Java问题定位的方法体系化,提供一种以黑盒子方式进行问题定位的思路:如何使用线程堆栈进行性能瓶颈分析?如何分析内存泄漏?如何分析系统挂死? 目录 总述 如何输出线程堆栈? 如何解读线程堆栈? 线程的解读 锁的解读 线程状态的解读 总述 什么是线程堆栈?线程堆栈也称线程调用堆栈,是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某一个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况。虽然不同的虚拟机打印出来的格式有些不同,但是线程堆栈的信息都包含: 1、线程名字,id,线程的数量等。 2、线程的运行状态,锁的状态(锁被哪个线程持有,哪个线程在等待锁等) 3、调用堆栈(即函数的调用层次关系)调用堆栈包含完整的类名,所执行的方法,源代码的行数。 借助堆栈信息可以帮助分析很多问题,如线程死锁,锁争用,死循环,识别耗时操作等等。在多线程场合下的稳定性问题分析和性能问题分析,线程堆栈分析湿最有效的方法,在多数情况下,无需对系统了解就可以进行相应的分析。 由于线程堆栈是系统某个时刻的线程运行状况(即瞬间快照),对于历史痕迹无法追踪。只能结合日志分析

清华学霸整理,Python入门到精通这几本书帮你快速入行

自闭症网瘾萝莉.ら 提交于 2020-08-14 22:28:25
今天我来为大家分享十本不可错过的Python好书,分别适合入门、进阶到精深三个不同阶段的人来阅读。 Python高性能编程 Amazon 五星畅销书。 Python 入门进阶必读。 Python代码仅仅能够正确运行还不够,你需要让它运行得更快。 Python核心编程(第3版) 系列销量逾70000册。 Python高手进阶图书,详解通用应用和Web开发。 Python开发人员的案头必读学习手册。 全面涵盖当今应用开发中的众多领域,为中级Python开发人员提供实践方法。 涵盖大量实用的代码案例,每章末尾的习题有助于巩固所学知识。 Python极客项目编程 Python高手进阶图书。 14个有趣Python项目案例。 掌握实用的Python编程技能。 Python机器学习实践指南 Python 机器学习入门图书。 结合了机器学习和Python语言两个热门的领域。 教你如何使用机器学习来收集、分析并操作大量的数据。 Python机器学习 预测分析核心算法 Python人员提高机器学习技能入门书。 专注于两类核心的“算法族”,即惩罚线性回归和集成方法。 从算法和Python 语言实现的角度认识机器学习。 用Python写网络爬虫 全面剖析爬虫技术的实现原理。 利用Python的强大功能从任意网站爬取数据。 适合有一定Python编程经验,对爬虫技术感兴趣的读者阅读。

字节跳动基于Flink的MQ-Hive实时数据集成

混江龙づ霸主 提交于 2020-08-14 13:43:51
背景 在数据中台建设过程中,一个典型的数据集成场景是将 MQ (Message Queue,例如 Kafka、RocketMQ 等)的数据导入到 Hive 中,以供下游数仓建设以及指标统计。由于 MQ-Hive 是数仓建设第一层,因此对数据的准确性以及实时性要求比较高。 本文主要围绕 MQ-Hive 场景,针对目前字节跳动内已有解决方案的痛点,提出基于 Flink 的实时解决方案,并介绍新方案在字节跳动内部的使用现状。 已有方案及痛点 字节跳动内已有解决方案如下图所示,主要分了两个步骤: 通过 Dump 服务将 MQ 的数据写入到 HDFS 文件 再通过 Batch ETL 将 HDFS 数据导入到 Hive 中,并添加 Hive 分区 痛点 任务链较长,原始数据需要经过多次转换最终才能进入 Hive 实时性比较差,Dump Service、Batch ETL 延迟都会导致最终数据产出延迟 存储、计算开销大,MQ 数据重复存储和计算 基于原生 Java 打造,数据流量持续增长后,存在单点故障和机器负载不均衡等问题 运维成本较高,架构上无法复用公司内 Hadoop/Flink/Yarn 等现有基础设施 不支持异地容灾 基于 Flink 实时解决方案 优势 针对目前公司传统解决方案的痛点,我们提出基于 Flink 的实时解决方案,将 MQ 的数据实时写入到 Hive,并支持事件时间以及

JIT的Profile神器JITWatch

落花浮王杯 提交于 2020-08-14 13:22:26
简介 老是使用命令行工具在现代化社会好像已经跟不上节奏了,尤其是在做JIT分析时,使用LogCompilation输出的日志实在是太大了,让人望而生畏。有没有什么更加简便的方法来分析JIT日志呢?快来和小师妹一起来学习JITWatch吧。 什么是JIT 小师妹,F师兄,JIT就是Just In Time compilers。能不能再总结一下JIT到底是做什么的呢? 当然没问题,JIT主要有两个作用,第一个作用大家应该已经知道了,就是在运行时将byte code编译成为机器码,提高程序的执行速度。 第二个作用就是在运行时对代码进行优化,同样的也对性能进行提升。 JIT中有两种编译器,C1代表的是Client Compiler,C2代表的是Server Compiler。 其中C1只是简单的编译,而C2在收集到更多信息之后,会进行更加深入的编译和优化。 常见的优化手段有:Loop unrolling, Inlining, Dead Code Elimination,Escape analysis, Intrinsics, Branch prediction等。 JDK8中会默认启动分层编译。你也可以使用-XX:+TieredCompilation来手动启动它。 JITWatch简介 小师妹:F师兄

区块链毕业设计参考论文集【十九】

谁说我不能喝 提交于 2020-08-14 12:09:23
区块链作为一种崭新的、颠覆性的技术,是国内外活跃的研究领域和毕业设计选题方向。本文列出最新的一组区块链方面的论文,希望可以对选择区块链毕业设计的同学们有所帮助,这是 汇智网 编辑整理的区块链毕业设计论文系列中的第19篇。 区块链开发教程链接: 以太坊 | 比特币 | EOS | Tendermint | Hyperledger Fabric | Omni/USDT | Ripple 本文整理了最新的可用于区块链毕业设计的参考论文,如果需要访问区块链毕业设计必读 论文系列的最新文章,可以持续关注我们的 博客 , 或加入QQ群: 532241998 。 1、基于区块链和物联网的移动设备能耗实时监测 随着物联网的快速发展,在不久的将来,电子设备就会自带物联网特性,这使得对设备能耗的跟踪成为可能,从而能够生成位置无关的能耗计费账单。 本论文提出了一种去中心化的计量架构,可以支持具备IoT能力的设备监测其自身能耗。在这一架构当中,设备的能耗数据发送给聚合器,聚合器负责验证信息并提供基于区块链的安全数据存储,保护数据不受外部操纵。实验结果表明,本文提出的架构支持设备的移动性和位置无关的能耗监测。 论文PDF下载: Real-Time Energy Monitoring in IoT-enabled Mobile Devices 2、从拜占庭副本到区块链:共识算法只是开始

华为HMS全球应用创新大赛启动 百万美元奖金激励开发者

 ̄綄美尐妖づ 提交于 2020-08-14 11:30:26
  华为HMS全球应用创新大赛正式启动,邀请全球开发者集成HMS Core,通过华为独特的“芯-端-云”能力为用户提供创新应用体验。华为为本次大赛特设100万美元创新激励奖金,激发全球应用开发者创新动力。优胜参赛者还有机会获得华为应用市场推广资源、华为云资源,以及优先参与华为开发者联盟各类活动等奖励。   HMS Core作为华为“芯-端-云”开放能力合集,面向开发者提供核心服务能力,比如机器学习、HiAI、AR引擎等领先能力。截至2020年3月,全球已有140多万开发者加入HMS生态,全球接入HMS Core的应用数量超过6万。华为消费者云服务总裁张平安在启动仪式上表示,“我们希望通过覆盖全球的华为应用市场,让每一个创新应用都能触达全球6.5亿华为终端用户,共享创新成果。”   全球开发者利用华为开放的能力、集成开发环境和工具,能够实现一点接入、全球全场景全终端智慧分发,在5G+AI智慧时代为用户带来了更多的应用创新体验。AppGallery Connect作为华为提供的应用一站式服务平台,为开发者提供覆盖“创意-开发-分发-运营-分析”全生命周期的64项服务,例如在运营阶段面向开发者开放更多能力,赋能开发者以自定义方式进行社区运营、活动运营、自定义礼包、Push通知等精细化运营,推动拉新促活,加速应用创新,创造更多社会价值。   大赛启动仪式上

小师妹学JVM之:逃逸分析和TLAB

一个人想着一个人 提交于 2020-08-14 11:08:11
简介 逃逸分析我们在JDK14中JVM的性能优化一文中已经讲过了,逃逸分析的结果就是JVM会在栈上分配对象,从而提升效率。如果我们在多线程的环境中,如何提升内存的分配效率呢?快来跟小师妹一起学习TLAB技术吧。 逃逸分析和栈上分配 小师妹:F师兄,从前大家都说对象是在堆中分配的,然后我就信了。上次你居然说可以在栈上分配对象,这个实在是颠覆了我一贯的认知啊。 柏拉图说过:思想永远是宇宙的统治者。只要思想不滑坡,办法总比困难多。别人告诉你的都是一些最基本,最最通用的情况。而师兄我告诉你的则是在优化中的特列情况。 小师妹:F师兄,看起来JVM在提升运行速度方面真的做了不少优化呀。 是呀,Java从最开始被诟病速度慢,到现在执行速度直追C语言。这些运行时优化是必不可少的。还记得我们之前讲的逃逸分析是怎么回事吗? 小师妹:F师兄,这个我知道,如果一个对象的分配是在方法内部,并且没有多线程访问的情况下,那么这个对象其实可以看做是一个本地对象,这样的对象不管创建在哪里都只对本线程中的本方法可见,因此可以直接分配在栈空间中。 对的,栈上分配的对象因为不用考虑同步,所以执行速度肯定会更加快速,这也是为什么JVM会引入栈上分配的原因。 再举一个形象直观的例子。工厂要组装一辆汽车,在buildCar的过程中,需要先创建一个Car对象,然后给它按上轮子。 public static void main

超简单集成HMS ML Kit 实现parental control

五迷三道 提交于 2020-08-14 10:48:35
前言   各位应用程序开发者有没有在后台收到过家长们的反馈? 希望能够提供一个开关,采取一些措施保护小孩的眼睛,因为现在小孩子的近视率越来越高,和他们长时间近距离盯着屏幕有很大的关系。最近有一个海外的客户通过集成了ML kit 实现了防范小朋友眼睛离屏幕过近,或者玩游戏时间过长的父母类控制类功能。 场景   父母需要这个功能防止小朋友眼睛距离屏幕过近,或者小朋友看屏幕时间过长。 开发前准备 在项目级gradle里添加华为maven仓   打开AndroidStudio项目级build.gradle文件   增量添加如下maven地址: buildscript { { maven {url 'http://developer.huawei.com/repo/'} } } allprojects { repositories { maven { url 'http://developer.huawei.com/repo/'} } } 在应用级的build.gradle里面加上SDK依赖 dependencies { implementation 'com.huawei.hms:ml-computer-vision-face:1.0.4.300' implementation 'com.huawei.hms:ml-computer-vision-face-shape-point

「Postman教程 」自动测试-3

↘锁芯ラ 提交于 2020-08-14 10:25:43
经过前面的基础教程,现在我们应该能理解大部分功能了。现在罗列些实际工作中的应用 脚本的流程如下图: 1.这样我们就可以在 Pre-request Script 里添加解析 json 代码 2.Send 由 Run 来触发,也可以用 newman 来触发 3.Test 里加上断言语句 多测试用例 // Pre-request Script uri = request.url.split('}}')[1] pm.environment.set("iteration-uri", uri) if (data && data[uri]) { var keys = Object.keys(request.data) var iteration_keys = Object.keys(data[uri]) for (var index in iteration_keys) { let key = iteration_keys[index] if (arrHasValue(key, keys)) { pm.collectionVariables.set(key, data[uri][key]) console.log('key: ' + key + ',value: ' + data[uri][key]) } else { console.log('keys has not ' + key) } }

以太坊合约开发中动态数组的使用【Solidity Assembly】

青春壹個敷衍的年華 提交于 2020-08-14 03:39:52
我们始终建议在开发Solidity智能合约时尽量不要使用汇编。但在少数情况下可能并没有其他选择,因此还是需要学习一些Solidity汇编开发的知识。在这个教程中,我们将学习如何在Solidity汇编开发中使用动态字节数组。 用自己熟悉的语言学习 以太坊DApp开发 : Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart 1、使用Remix编辑器 首先,让我们将这个简单的合约粘贴到 remix编辑器 中: pragma solidity ^0.5.10; contract AssemblyArrays { bytes testArray; function getLength() public view returns (uint256) { return testArray.length; } function getElement(uint256 index) public view returns (bytes1) { return testArray[index]; } function pushElement(bytes1 value) public { testArray.push(value); } function updateElement(bytes1 value, uint256