自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 Wiki小记(一):Centos6下搭建Dokuwiki

一、前言二、环境在centos6 下安装apache2,phpyum install httpdyum install php/etc/init.d/httpd startchkconfig --levels 235 httpd on --- 开机自启,建议打开三、安装1)在官方网站下载最新的稳定版:http://www.splitbrain.org/projec

2016-05-08 18:24:26 57237

原创 Linux小记(一):Supervisor利器

一、前言一般在自己机器上搭建环境,可能会有很多个脚本需要在后台启动,比如MQ,Zk,Redis,Kafka等,但是,每次都频繁找bin目录之类的都会很烦,Supervisor提供了很好的进程管理,本篇将介绍其基本使用。二、简介Supervisor ( http://supervisord.org ) 是一个用Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是

2016-05-04 23:36:24 1870

原创 ActiveMQ小记(二):基于ZooKeeper的HA方案

本文基于:http://www.cnblogs.com/yjmyzz/p/activemq-ha-with-zookeeper.html从 ActiveMQ 5.9 开始,ActiveMQ 的集群实现方式取消了传统的Master-Slave 方式,增加了基于ZooKeeper + LevelDB的 Master-Slave实现方式,其他两种方式目录共享和数据库共享依然存在。

2016-05-02 22:51:47 2173

原创 ActiveMQ小记(一):监控

初衷:介绍ActiveMQ的监控,网上也有很多关于这之类的文章,但是,讲解的不是太详细1. 搭建建议自己clone github https://github.com/apache/activemq 下来,然后编译,打包,方便以后进行改造网上很多关于之类的demo,本文不再赘述,详情可参考:http://my.oschina.net/Auhgnahz/blog/551620

2016-05-02 00:00:00 10429 1

原创 ELK小记(一):搭建ELK日志系统

步骤:一、下载ELK的三大组件Elasticsearch下载地址: https://www.elastic.co/downloads/elasticsearchLogstash下载地址: https://www.elastic.co/downloads/logstashKibana下载地址: https://www.elastic.co/downloads/kiba

2016-04-29 22:08:48 5115 1

转载 JVM性能调优

原文地址:http://blog.csdn.NET/chen77716/article/details/5695893 最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现把经验做一记录。一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代)Tenured(年老代)永久代(Perm)  其中New和

2017-04-06 16:25:15 536 1

转载 线上问题排查命令总结

原文地址:http://blog.csdn.NET/liuzhengyang1/article/details/52573764需要做好监控和报警,打日志要准确规范。性能类诊断uptimetopvmstat 1iostat 1dstatpidstat 1sar -n DEV 1

2017-04-06 16:24:23 731

转载 生产环境下CPU过高故障排查--top、ps、grep、printf、jstack等命令排查

问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况。2,程序代码有问题,出现死循环,可能性极大。问题解决:1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出。2,记得原来通过strace跟踪的

2017-04-06 16:23:15 1300

原创 RPC熔断降级

背景:现在比较流行的rpc框架,如:spring cloud,dubbox等,现在公司内部由于服务之间的依赖关系复杂,故其一服务down了,我们必须保证调用方的服务是可用的,而不必要一直请求调用方,这样只会浪费本服务的资源,影响对外的相应,故引入相应的服务熔断降级。一、前言目前,公司采用的rpc框架是dubbox,故可以依赖dubbox提供的调用方,使用hystrix,实现消费者的

2017-02-12 16:20:25 4893 2

原创 Mac下安装降级版thrift

背景:之前手残卸载了在本机上安装的thrift-0.9.3版本,后来直接通过brew install thrift,安装的版本都是0.10.0;由于之前所有服务都是使用0.9.3,也是通过RPC访问,故我个人服务不敢在生产上直接升级版本(没测试过不同版本之间RPC调用的兼容性),网上好多都试过没成功,故本篇记录下怎么在mac下安装降级版的thrift。一、安转Thrift依赖包1)

2017-02-12 15:45:09 9015 3

原创 Mac OS X 疑难杂症(一)

之前帮朋友搭建环境时,在执行sh命令时,遇到了如下问题:`bad interpreter operation not permitted`,于是查阅资料并记录!解决方案:找到不能执行的目录,执行如下指令即可:xattr -rd com.apple.quarantine [dir目录名 | 文件]参考:https://blog.omgmog

2016-09-04 20:56:31 630

原创 Apache ab 压测

背景:网上关于ab get方式的压测太多,而关于post的压测方式基本一笔带过,本篇主要介绍ab post压测及遇到的相关问题。一个简单的shell脚本:#!/bin/shab -l -n $1 -c $2 -p data.txt -T 'application/json' "post url" > ./data_result.txt描述:data.txt -

2016-09-04 20:34:56 444

转载 GitHub小记(一)

在github.com上建了一个项目,可是每次推送push的时候,都会提示输入github的用户名和密码,如下图所示:可是我明明把我的公钥添加到了github上,如下图所示: 竟然显示“Never used”上网查了一下原来是https协议每次都需要进行用户验证,如下图,当时我是用https协议进行本地仓库和远程仓库的连接的: 现在输入如下指令进行查询

2016-09-03 15:43:34 514

原创 Wiki小记(二):Dokuwiki主题和插件推荐

一、简介二、常用插件三、效果

2016-05-10 00:07:15 5228

转载 Quartz小记(一):Elastic-Job - 分布式定时任务框架

Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架。去掉了和dd-job中的监控和ddframe接入规范部分。该项目基于成熟的开源产品Quartz和Zookeeper及其客户端Curator进行二次开发。项目开源地址:https://github.com/dangdangdotcom/elastic-jobddframe其他模块也有可独立开

2016-05-08 00:19:20 17166

原创 设计模式 - 动态代理

动态代理的好处:1. 方法的增强让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情(甚至根本不去执行这个方法),因为在InvocationHandler的invoke方法中,你可以直接获取正在调用方法对应的Method对象,具体应用的话,比如可以添加调用日志,做事务控制等。2. 远程调用比如现在有Java接口,这个接口的实现部署在其它服务器

2016-04-03 16:19:26 390

转载 深入浅出 RPC - 深入篇

版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[-]RPC 功能目标RPC 调用分类RPC 结构拆解RPC 组件职责RPC 实现分析导出远程接口导入远程接口与客户端代理协议编解码传输服务执行调用RPC 异常处理总结《深入篇》我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功

2016-04-03 16:16:34 373

转载 深入浅出 RPC - 浅出篇

近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用。在平时的日常开发中我们都在隐式或显式的使用 RPC,一些刚入行的程序员会感觉 RPC 比较神秘,而一些有多年使用 RPC 经验的程序员虽然使用经验丰富,但有些对其原理也不甚了了。缺乏对原理层面的理解,往往也会造成开发中的一些误用。本文分上下两篇《浅出篇》和《深入篇》,其目标就是想尝试

2016-04-03 15:43:23 362

转载 RPC,REST,WebService的区别

摘要Web Service 已经不再新鲜, 而随后的 SOA, Cloud Computing 也不断出现, 直到百度也 提出了自己的 框计算, 我们尚且不管这些时髦的名词背后所蕴藏的实际的技术创新有多少, 但是他们终究是逃不出一点, 即 如何解决访问服务的问题, 而此处的服务通常不在本地而是在 遥远的你不知道的美国或者印度.本文想阐述标题中提到的两种解决远程服务访问的方法

2016-04-03 15:35:05 639

原创 Java String不可变类总结

引用最经典的几个案例case1:上面的这个案例,不用多说了, s1, s2都是指向常量池中的同一片内存,s3指向的是堆中的内存,s4指向的也是常量池中的。case2:对应的字节码:s4在编译时,直接转成“abc”,存放在常量池,故s1 == s4;但是,String字符串的相加,本质是同步new StringBuilder,之后再通过toStri

2016-03-24 20:38:49 491

转载 Redis持久化(二)

总的来说有两种持久化方案:RDB和AOFRDB方式按照一定的时间间隔对数据集创建基于时间点的快照。AOF方式记录Server收到的写操作到日志文件,在Server重启时通过回放这些写操作来重建数据集。该方式类似于MySQL中基于语句格式的binlog。当日志变大时Redis可在后台重写日志。若仅期望数据在Server运行期间存在则可禁用两种持久化方案。在同一Redis实例中同时开启AO

2016-03-14 16:47:16 202

转载 Redis持久化(一)

Redis 持久化:提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF.RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。

2016-03-14 16:45:53 201

转载 Tomcat启动过程详解

基于Java的Web 应用程序是 servlet、JSP 页面、静态页面、类和其他资源的集合,它们可以用标准方式打包,并运行在来自多个供应商的多个容器。Web 应用程序存在于结构化层次结构的目录中,该层次结构是由 Java Servlet 规范定义的。Web 应用程序的根目录包含直接存储或存储在子文件夹中的所有公共资源,比如图像、HTML 页面等。构成:Web应用由Web组件(一组Java类库)、

2016-03-13 16:48:10 321

转载 Java内存泄露详解

Java内存泄漏发生的情况字数984 阅读849 评论0 喜欢8虽然Java自带垃圾回收机制(GC),程序员不需要手动进行内存管理,但是仍然会出现内存泄漏的情况。尽管如此,Java的自动内存管理,比起C/C++,内存泄漏的情况大大减少了。下面总结下什么情况下会发生Java内存泄漏。静态集合类在使用Set、Vector、HashMap等集合类的时候需要特别注意,有

2016-03-13 13:57:58 267

原创 数组打包不同的元素

数组打包不同的元素:给定指定的数组,将数组打成不同的包,确保每包的元素不一样public class Node { private T data; private int parent_id; private int self_id; public Node() { } public Node(T data) { super(); this.data = data;

2016-03-12 23:39:36 240

原创 两个栈实现队列及两个队列实现栈

两个栈实现队列及两个队列实现栈:两个栈实现队列:将一个栈内的数据倒到另一个栈里面,并弹出两个队列实现栈:将一个队列里面的前(len-1)个数据添加到另一个队列,并弹出该队列的最后一个元素public class Queue { private static Stack stack = new Stack(); private static Stack stack2 = new S

2016-03-12 23:13:26 325

原创 完全二叉树的三种遍历

完全二叉树的三种遍历:前序遍历:根 --- 左子树 --- 右子树中序遍历:左子树 --- 根 --- 右子树后序遍历:左子树 --- 右子树 --- 根public class TestDemo3 { private static List list = new LinkedList(); public static void main(String[] args)

2016-03-12 22:30:38 569

原创 单向链表

单向链表的构造:public class LinkList { private Node headNode; public void createLinked(int[] a) { Node tailNode = new Node(); headNode = tailNode; Node newNode; for (int i = 0; i < a.length; i+

2016-03-12 18:58:31 299

转载 使用guava来做接口限流

一、问题描述    某天A君突然发现自己的接口请求量突然涨到之前的10倍,没多久该接口几乎不可使用,并引发连锁反应导致整个系统崩溃。如何应对这种情况呢?生活给了我们答案:比如老式电闸都安装了保险丝,一旦有人使用超大功率的设备,保险丝就会烧断以保护各个电器不被强电流给烧坏。同理我们的接口也需要安装上“保险丝”,以防止非预期的请求对系统压力过大而引起的系统瘫痪,当流量过大时,可以采取拒绝或者引

2016-03-01 23:41:31 2219

原创 Java排序七:快排

public class TestDemo { public static void main(String[] args) { int[] arr = new int[10]; Random random = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(100);

2016-03-01 23:35:21 264

原创 Java排序五:归并排序

public class TestDemo { public static void main(String[] args) { int[] arr = new int[10]; Random random = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(100);

2016-03-01 23:33:52 237

原创 Java排序四:二分插入排序

public class TestDemo { public static void main(String[] args) { int[] arr = new int[10]; Random random = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(100);

2016-03-01 23:31:56 329

原创 Java排序三:直接插入排序

public class TestDemo { public static void main(String[] args) { int[] arr = new int[10]; Random random = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(100);

2016-03-01 23:29:19 238

原创 Java排序二:选择排序

public class TestDemo { public static void main(String[] args) { int[] arr = new int[10]; Random random = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(100);

2016-03-01 23:25:48 420

原创 Java排序一:冒泡排序

public class TestDemo { public static void main(String[] args) { int[] arr = new int[10]; Random random = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = random.nextInt(100);

2016-03-01 23:23:51 350

原创 Java排序六:堆排序

堆排序原理见:堆排序/** * @author liaomengge * 堆排序,依据完全二叉树的特性,至少只存在左节点,不存在右节点,且当i在n/2 + 1 - n之间属于叶子节点, * 故建立最大(最小)堆,只需要在[0,(n-1)/2],注:数组下表从0开始 * */public class TestDemo { public static void main(

2016-03-01 23:19:07 306

转载 高并发性能调优

下面是项目大概的一个模型:从用户角度看,完成request到接收response的时间为jvm内部处理时间+http请求Redis 网络IO时间 + https请求远程服务器 网络IO时间 +用户本身request和服务器response返回的网络IO时间。实际本地测试,https请求响应时间大约110ms~350ms 波动。使用REST Clien

2016-02-28 20:25:11 5520

转载 Socket如何保证长连接

方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动一个低级别的线程,在该线程中不断检测客户端的回应, 如果在一定时间内没有收到客户端的回应,即认为客户端已经掉线;同样,如果客户端在一定时间内没 有收到服务器的心跳包,则认为连接不可用。方法2:TCP的KeepAlive保

2016-02-28 17:25:43 13150

转载 为什么心跳包(HeartBeat)是必须的?

几乎所有的网游服务端都有心跳包(HeartBeat或Ping)的设计,在最近开发手游服务端时,也用到了心跳包。思考思考,心跳包是必须的吗?为什么需要心跳包?TCP没有提供断线检测的方法吗?TCP提供的KeepAlive机制可以替代HeartBeat吗?由于连接丢失时,TCP不会立即通知应用程序。比如说,客户端程序断线了,服务端的TCP连接不会检测到断线,而是一直处于连接状态。这就带来了很大

2016-02-28 17:24:36 3935

原创 交换数组的任意2个元素

交换数组的2个元素:public class TestDemo11 { public static void main(String[] args) { int[] arr = { 1, 2 }; // swap(arr, 0, arr.length - 1); // swap2(arr, 0, arr.length - 1); // swap3(arr, 0, arr.le

2016-02-23 14:35:10 698

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除