- 博客(75)
- 资源 (1)
- 收藏
- 关注
原创 容器内获取CPU核数的坑
现在越来越多的公司将服务通过容器来部署,但这里其实对Java的应用有一个坑。很多超时敏感的应用其实对GC的要求还是比较高的,减少GC的时间变得很重要,比如你可以根据当前机器的CPU核数得到一个较好的并发GC线程数 -XX:ParallelGCThreads,从而减少STW的时长。但在早期的JDK版本中,比如笔者使用的Jdk1.8u102,当你使用Java的Runtime获取CPU数量时,在容器里面会返回容器所在宿主机的核数,而不是容器自身的:int cores = Runtime.getRuntime(
2020-09-11 15:13:13
4668
原创 Zipkin实现分布式调用链监控实践
本人所在的产品线是公司统一的构建管理平台,该平台采用了微服务的构造,跟微服务自身的通病一样,服务数量多了之后,存在这样一些问题:接口超时或者调用失败后,无法知道具体是那个下游接口超时接口响应慢后,怎么去了解是那个服务的那个方法调用耗时较长对前端暴露的接口,响应时间对用户的体验比较敏感,怎么监控到系统中存在的慢接口,进而优化微服务发展到今天,业界对这类问题已经有很多通用的解决方案,最早的比较Google公司发表的Dapper应该算得上是始祖了吧。 我们也不想重复造轮子,比较了一些方案,综合对埋点语
2020-09-03 18:20:49
798
原创 Yaml的多行字符串格式
Yaml多行文本格式Yaml支持多行的字符串格式,可以通过下面两种格式指定:Block ScalarsFlow ScalarsBlock ScalarsBlock Scalars格式的字符串由两部分组成:Scalar header 和 字符串下面就是一个Block scalar字符串的例子:example: > Several lines of text, with s...
2020-05-07 11:42:07
3727
原创 Python3.7镜像制作
最近需要一个Python3.7的镜像,本来想直接用发行商的rpm直接安装,但由于要基于centos, 找了一下只有FreeBSD/Ubuntu有提供,没办法只要自己从源代码来编译。本来想着也是挺简易的,但过程却比较痛苦,折腾了好久,在这里整理一下。其实总结下来,都是日志惹的祸,有些关键的日志在make的过程被刷了导致没有发现问题。我的步骤是这样的:官方安装指南./configure --pr...
2020-04-22 17:25:32
1382
原创 Docker容器网络实践
Docker容器网络实践Docker容器网络实践期望的结果操作步骤验证网络连接Docker容器网络实践文章的目的是了解容器网络是如何工作的。当我们用docker run启动一个容器的时候,通常可以通过–network参考来指定docker的网络模型,比如host, bridge, 这样docker runtime会自动为容器创建相应的网络。为了更加深刻地了解容器的网络工作原理,本文不使用doc...
2020-04-01 12:22:01
406
原创 Jenkins 一致性Hash节点调度
Jenkins 一致性Hash节点调度为什么需要一致性Hash一致性Hash为什么需要一致性Hash这个话题有点广,但在持续集成领域,使用Jenkins做CICD几乎已经成了一种标准。持续集成从使用者的角度来看有一个很重要的指标:关注快速的反馈,比如用户在提交代码后,开发或者测试能快速知道代码的质量,部署到测试环境。如何才可以在Jenkins上提高用户的反馈速度呢?其实构建的速度一定程度上取...
2020-01-12 15:46:58
849
原创 优化Jenkins在云端构建性能
Jenkins在云端构建性能优化分析问题背景NodeProvisionerStragetegyJenkins Kubernates Plugin优化方案方案验证问题背景目前我们的PaaS平台使用了Jenkins对作为分布式构建调度平台,目前每天大概有5000左右的业务构建在上面运行,并且这些构建80%的执行是在高峰时段的几个小时内,执行包含单元测试,静态代码检查,打包,烘焙镜像,自动化测试以及...
2019-12-06 17:01:46
1132
原创 StrngEntity中文编码问题
最近在调查系统中一个有关中文编码的问题,发现了一些坑,最终定位了是有着HTTP编码的问题。最开始问题是这样的,我们有A/B/C三个系统,A系统发出的内容包含了中文,通过Tcpdump抓包发现B系统接收到的Http中的内容是正确的,但是B在转发给C系统之前,重新构建了一个HttpRequest,从这个新构建的Request发出来的内容就不正确了,表现为Content-Length少了。构建新的H...
2018-10-23 15:56:39
5073
原创 Go 学习杂谈 - Interface
上一遍文章中只简述Golang中的struct,这里想再总结一下另外一个所有高级语言中都有的特性:接口interface说到其它的高级语言,在表述实现了某个接口里,需要显式地声明,比如Java通过implement关键字。但在Go中,一切变得简单。首先,先定义一个接口类型,如下:package intPkgtype Bird interface { Fly() Chirp()...
2018-10-07 23:03:51
248
原创 Go学习杂谈
使用Go已经快有半年了,为了适应新公司的开发需要,半道入行,写了很多基于Go的应用(当然大部分是二次开发),也算是Golang的小用户了。一直没有太多的时间很系统地去看一些Golang的书籍,平时写代码也是凭借着对Java/C++的经验去猜测写Golang的代码,对常用的一些系统库也是在工作中学习。今天也是想总结回顾一下之前在使用过程中学习了一些东西,也借此巩固分享一下。先说说总体对Golang...
2018-10-07 22:37:19
253
原创 Java Thread Dump
Thread dump是对于程序的诊断是非常有用的,它可以帮助我们分析诸如程序没有响应,响应慢,CPU抖动,死锁,内存问题以及其它的系统问题。今天主要想分享如果打印Thread Dump假定我们现在怀疑某个java进程出现了问题,比如没有响应,首先可以尝试拿到这个java应用对应的process Id (ps or jps)。然后可以看一下这个应用启动了那一些线程,这个步骤可以top命令:...
2018-02-27 23:44:29
1418
原创 python 单元测试失败ModuleImportFailure
在用unittest跑python的单元测试的时候,碰到下面奇怪的错误:E======================================================================ERROR: __main__ (unittest2.loader.LoadTestsFailure)-----------------------------------
2018-01-25 15:53:59
6384
3
原创 异步执行任务的方式
常用的异步的方式创建异步线程 这个是最原始的办法,每次创建一个新的线程来运行需要异步执行的任务,任务执行完毕就销毁这前线程。由于线程的创建的开销较大,不建议这种办法。使用异步消息队列 producer往queue里扔任务,然后多个consumer线程从queue里面取出任务并执行。线程池 对第一种方式的优化,由于线程的创建需要系统资源的开销,所以利用线程池来避免线程的频率创建与销毁
2018-01-16 22:57:57
422
原创 Tensorflow 学习笔记 - 常用 API
CNN APITensorflow 提供了一些内置的API实现了CNN网络结构中的卷积,池化,全连接网络等运算操作。tf.nn.conv2d(input,filter, strides, padding, data_format=’NHWC’) 完成CNN卷积运算,其中:input: 4-D 的Tensor, 每个dimension的意思由data_format指定,默认是[bat
2017-12-09 22:14:48
5350
原创 BP神经网络工作原理
The whole BP Neural Network computation repeat below procedures:Forward Propagation Compute costBackward PropagationUpdate ParametersToday I want to do a summary for them per my understanding sinc
2017-12-05 19:29:06
439
原创 深度学习的Dimension检查
在构建深度学习神经网络结构的时候,由于网络的拓扑结构比较复杂,包括比较多的层次(hidden layer),以及每一层又有许多activation(neuron)单元组成,因此在计算forward以及backward propagation时,为了减少不必要的错误,最好对其中的每一层的input/output matrix的dimension有个底。为了更好地表述,一般需要统一一下用到的一些符号,以
2017-12-02 18:48:10
1612
原创 Tensorflow 学习笔记:Input Pipeline - Dataset
Dataset是Tensorflow里面一个比较重要的概念,我们知道机器学习算法需要大概的数据来训练data model. 所以Dataset就是用来做这么一件重要的事情:定义数据pipline,为学习算法提供训练数据。其实我们也可以Dataset定义了一个数据源,指向某些包含训练数据的文件列表,或者是内存里面已有的数据结构(比如Tensor objects)。Dataset 数据结构组成Datas
2017-11-23 13:29:47
11199
原创 代码重构小结
关于代码重构的一些总结:能用组合(composition)就不用继承(inheritance) HeadFirst 的设计模式这本书里面好像也提到这点。个人的感觉是当类的继承结构很深的时候,了解一个复杂的方法就会变得很痛苦,特别是一个类很庞大的时候。由于每个方法由于是多态的,在阅读代码的时候你还得搞清楚它到底是运行父类的方法还是子类的方法。而且如果这个类还跟其它的类有依赖的时候,trace这个调
2017-08-11 15:38:41
291
原创 用Aspectj拦截接口类中的所有方法
先来看一个问题,如果业务代码中有一个类,它实现了某个接口,如下:接口类:public interface Foo { public void hello(String say); public void goodBye();}实现类:public class SimpleFoo implements Foo { public void hel
2017-08-02 23:35:38
10979
原创 浅谈微服务与负载均衡LBS
微服务这几年应该是我听过最多的,很多公司的架构现在都在往这个方面迁移,包括很多的互联网公司,以及其它行业的软件公司。至于原因吗,很多人都出自己的理解,从业务需求上讲,可以scale-out,满足业务增长的需求,另外从软件开发者的角度,服务化的架构确实是降低了各个软件模块的偶合,更方便软件的开发,部署,测试。但这里为什么把微服务跟负载均衡服务器联系在一起呢?首先看一下当软件的架构从传统的单体应用切换到
2017-07-22 23:59:25
8800
原创 Hazelcast Rest API
Hazelcast 提供了一组Rest的API用于管理集群以及访问数据。通过这个API你可以知道集群的信息,也可以访问它的partition里面的分布式对象,比如map, queue之类的数据结构。在使用这些API之前,需要将下面的这个System property加到JVM的启动参数中:-Dhazelcast.rest.enabled=true以下的API在1.9.4以及以上的版本中验证过。 H
2017-07-22 15:03:41
1333
翻译 Go 语言的Template Package
理解template package之前,最好能快速看一下Go的一些数据结构,比如struct, array 和slice,这些数据结构在template 里面会被经常用到。Structstruct是一个包含多个field的集合,跟C语言的结构体非常类似,可以用关键字type以及struct来定义一个struct。例如:type My_Struct_Name struct { X int
2017-07-18 22:56:21
1068
原创 怎样echo Shell的命令行
当执行一个shell脚本的时候,我们通常只能通过echo或者printf 来打印shell的输出,而不能看到脚本执行的每一条命令。而且有些命令比较复杂,命令里面通常还会有变量,我们可能还想知道在变量替换后的命令长什么样子。那么怎么做到呢?可以在shell的前面加到下面的命令#!/bin/shset -x # -x表示打开命令输出,对应的+x就是关闭今天的输出当然你也可在执行shell脚本前加上面
2017-07-09 22:02:20
605
原创 Disable Maven的Test
在Maven默认的lifecycle里,当运行其中的一个phase的时候,它前面的phase也会被执行,比较你运行mvn install phase的时候也会跑compile, test这些phase. 假如我有一个很大的project,里面包含大量的单元测试代码,在开发的时候我们只是想拿一个jar包,不想跑这些耗时的单元测试,应该要怎么样做呢?你可以告诉maven跳过test这个phase,命令
2017-07-09 22:02:17
793
原创 awk分割字符
我们在Linux下运行命令的时候,经常会看到很多命令的输出都是分列的,作为程序员的我们经常需要取某些列来分析,awk就提供了这个比较灵活的功能。awk默认的列分割符是空格(多个空格也是一样),比如:$ echo "folder1 folder2 folder3" | awk '{print $1}'folder1当然你也可以用-F option指定分割符,比如下面的命令用冒号作为分割符: $ e
2017-07-09 22:02:15
2178
原创 SpringBoot可执行包结构
相对于传统的JAVA可执行包(jar文件),SpringBoot的包结构有比较大的不一样。标准的JDK定义的jar文件里面是不能够有内嵌jar文件的,所以通常我们在执行一个jar文件里面的应用程序时,还需要通过-classpath来告诉JDK这个jar所依赖的所有的jar文件信息。而SpringBoot的build出来的包则允许将所有依赖的包打包到同一个jar里面,就是jar里面有jar,原因是s
2017-07-09 22:02:12
2284
1
原创 JBoss7配置datasource
jboss7是通过datasource subsystem来配置datasource的,声明一个datasource主要包括两步:提供JDBC driver 和定义一个跟这个driver关联的datasource. 例如在/configuration/standalong.xml定义下面的datasource:"urn:jboss:domain:datasources:1.0">
2017-07-09 22:02:09
1887
原创 Restful Web Service
Rest web service最早是Roy Fielding在他的一篇论文里提出来,主要的想法是通过HTTP来访问所有的资源。后来他也是参与JCP起草了一个关于REST的spec JSR-311, 其实实现是JAX-RS. Jersey是另外一个基于JSR311的实现以及拓展,RESTEasy是Jboss的一个出品。很多人问Spring MVC以及JAX-RS在REST这方面的区别,下面有一个分
2017-07-09 22:02:05
276
原创 如何用PowerMockito 测试静态方法
假如有下面一个类DemoStatic,它里面定义了各种静态方法,这些静态方法可能是一些Utilities方法,辅助其它的类。package mock.demo;public class DemoStatic { public static String sayHello() { return "Hello"; } public static String saySomething(String
2017-07-09 22:02:02
5172
原创 Lambda 函数 (匿名函数)
Lambda是希腊字母表中排序第十一位的字母,英语名称叫 lambada. lambda在python里面是用来创建简单的匿名函数的。如果在你的python程序中某个非常的简单,并且只是被使用1,2次,那就不必用def去特地定义这个函数。用lambda可以将这个小函数的代码内联到调用代码处。例如下面这个函数只是对参数进行加1运算。def increment(x): return x+1如果用
2017-07-09 22:02:00
378
原创 List Comprehensions (列表推导式)
最近在看别人写的python程序时,经常看到下面的一种写法,让我觉得非常的简洁:print [x for x in list]一开始并不知道这是什么样的高级语法(用phthon不是很多),好像在网上简单的搜索并学习了一个,这种格式在python的官方名称是List Comprehensions, 度娘叫:列表推导式。List Comprehensions主要是可以列表的遍历或以更加方便,简洁。 举
2017-07-09 22:01:56
1411
原创 Python (2.6)常用的API
文件系统操作相关的APIos.path.exists() 判断某个路径是否存在os.path.isfile()/isdir() 判断某个路径是文件还是目录os.path.basename() 获取文件名或目录名,例如os.path.basename("/a/b/c.txt") = c.txtos.path.dirname() 获取parent目录的路径信息,例如os.path.dirname("/
2017-07-09 22:01:53
268
原创 Elasticsearch中的store field跟non-store field的区别
在定义index的mapping的时候,我们可以指定某些fields是否要store(默认是不store), 那么他们有什么区别呢?PUT /my_index{ "mappings": { "my_type": { "properties": { "title": { "type": "string", "store": true
2017-07-09 22:01:51
3664
原创 怎么判断ElasticSearch index 和 type 存不存在
1. 判断index是否存在curl -XHEAD -i 'http://localhost:9200/twitter'如果返回200证明index (twitter)存在,404说明index不存在。2. 判断type是否存在curl -XHEAD -i 'http://localhost:9200/twitter/tweet'同样的,如果返回200证明type (tweet)存在,404说明t
2017-07-09 22:01:48
4443
原创 ElasticSearch 翻页查询
相对于Ealsticsearch的search API, 翻页查询可以将查询结果集分页返回,而不是将所有的结果放在一个page返回。如果查询的结果集包含大量的数据,就可以用到翻页查询(Scroll) API,比如有200K条数据,可以将它们分成20次请求,每次只返回10k条查询结果. 有点类似于数据库里面的游标。要使用翻页查询,需要在search请求中指定一个参数:scroll。这个参数是告诉el
2017-07-09 22:01:45
3245
原创 Maven Dependency Tree
Mavne的依赖树可以用来查看一个项目的依赖冲突。举个例子,想找出为什么common collection 2.0这个包会被maven的依赖树引用到,可以在该项目的目录下运行下面这行命令:mvn dependency:tree -Dverbose -Dincludes=commons-collectionsverbose 标志是用来告诉maven依赖树将那些被忽略掉的依赖包也显示出来,比如在这个
2017-07-09 22:01:42
1006
原创 Git 常用的命令
1. Stage 一个文件> git add demo/file1.txt2. Stage 目录下面所有的文件> git add -A demo3. Commit 所有已经stage的文件> git commit -m "your change notes"4. 提交你的commits> git push origin 5. 撤消你对某个文件改动(回滚到你改动之前的状态)> git checkou
2017-07-09 22:01:40
261
原创 DOM 常用到的功能模块
1. 从XML创建DocumentDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();InputStream stream = new FileInputStream(filePath);Document doc = d
2017-07-09 22:01:37
439
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人