ZooKeeper配置与使用

ZooKeeper Server是一个Java语言实现的分布式协调服务框架,因此需要JDK6+的支持。为了确保ZooKeeper服务的稳定与可靠性,通常是搭建成一个ZK集群来对外提供服务。ZK有一个重要的特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的,所以建议集群的机器数量为奇数。

1、安装JDK6+

2、去官网选择一个合适的版本下载。

#官网 http://www.apache.org/dyn/closer.cgi/zookeeper/

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar zxf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6

JVM G1垃圾回收器

回顾一下主流的(HotSpot JVM)JAVA垃圾回收器,堆被内存分解为三个区域,具体分为:新生代、老年代、持久代。

Java 7 HotSpotVM

Java 8 HotSpotVM

Java 8元空间(Metaspace)

元空间(Metaspace):

相信许多Java开发者都见过“java.lang.OutOfMemoryError: PermGen space”问题,这通常是类加载器相关的内存泄漏以及新类加载器的创建导致的,一般出现于代码热部署时。相对于正式产品,该问题在开发机上出现的频率更高,通常“问题”是默认值太低了, 常用的解决方法是将其设置为256MB或更高。

PermGen space的全称是Permanent Generation space,是指JVM永久保存区域,这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。JVM 种类有很多(如Oralce-Sun Hotspot, Oralce JRockit, IBM J9, Taobao JVM)。Oracle-Sun Hotspot才有PermGen space,JRockit以及J9没有这个区域。

随着JAVA8时代的来临,新增一种使用本地内存来存储类元数据信息称之为元空间(Metaspace),JVM永久区被元空间(Metaspace)替换(JEP 122), 与Oracle JRockit 和IBM JVM’s很相似。JVM参数 -XX:PermSize 和 -XX:MaxPermSize被XX:MetaSpaceSize 和 -XX:MaxMetaspaceSize代替,如果使用了-XX:PermSize 和 -XX:MaxPermSize启动时会发出警告。。 这意味着不会再有java.lang.OutOfMemoryError: PermGen问题,也不再需要你进行调优及监控内存空间的使用。

JVM内存管理与垃圾回收

Java虚拟机拥有自动管理内存机制,所以Java 程序员不需要像C/C++一样去关注内存的分配和释放,也不容易出现内存泄露和内存溢出的问题。但是如果一旦出现此类问题,如果我们对虚拟机的内存管理机制不了解,那么解决这类问题还是比较困难的,所以我们要深入学习JVM的内存管理。

Java代码是如何执行的?

Java设计模式(一)

设计模式的分类

创建型模式,共5种

1. 工厂方法模式
2. 抽象工厂模式
3. 单例模式
4. 建造者模式
5. 原型模式

结构型模式,共7种

1. 适配器模式
2. 装饰器模式
3. 代理模式
4. 外观模式
5. 桥接模式
6. 组合模式
7. 享元模式。

行为型模式,共11种:

1. 策略模式
2. 模板方法模式
3. 观察者模式
4. 迭代子模式
5. 责任链模式
6. 命令模式
7. 备忘录模式
8. 状态模式
9. 访问者模式
10. 中介者模式
11. 解释器模式

JVM性能监控工具

在 java 的 bin 目录下,jdk 提供了很多使用的工具,下面学习一些监控和故障处理的工具。

名称 作用
jps JVM process status tool,显示指定系统内所有的 HotSpot 虚拟机进程
jstat JVM statistics monitoring tool,用于收集 HotSpot 虚拟机各方面的运行数据
jinfo 显示虚拟机配置信息
jmap 生产虚拟机的内存快照 dump 文件
jhat 分析 dump 文件
jstack 显示虚拟机的线程快照

Mac OS X下使用 Charles 进行抓包

Charles 是一个网络抓包工具,可以在电脑起一个代理,手机配置代理 IP 后,就可以用 Charles 看到手机的网络请求了。

1、下载

http://www.charlesproxy.com/

2、启动 Charles,支持正版,如需破解请自行搜索

3、手机设置代理, 以 iPhone 为例

设置-无线局域网-选择已连接的局域网-HTTP代理-手动,服务器:你电脑的 IP,端口:8888

第一次用手机请求网络时,Charles会提示是否允许接入,选择Allow就可以了。

如果是 HTTPS 抓包,需要安装证书,证书地址:http://www.charlesproxy.com/ssl.zip

MacOS环境使用wireshark抓包

安装
brew install wireshark —with-qt5
启动应用
#如果不是管理员身份启动,则获取不到网卡信息。
sudo wireshark-qt
IP过滤
#来源IP
ip.src == 
#目标IP
ip.dst ==
#例如过滤来源192.168.1.10的请求
ip.src==192.168.1.10

Docker学习(四) Dockerfile

Dockerfile 由一系列Dockerfile指令构成,用于创建一个自定义image, 可以通过Dockerfile来描述构建镜像的步骤,并自动构建一个容器。Dockerfile指令忽略大小写,但是建议使用大写。

Dockerfile 命令格式:
INSTRUCTION arguments

MAINTAINER命令
#用于指定维护者的姓名和联系方式
MAINTAINER cbc, cbc@chenbaocheng.com
FROM命令
# 设置基于哪个image创建新的image,所以 FROM 应是 Dockerfile 里的第一条指令。如果没有指定tag, 默认tag是latest。

FROM <image>
或
FROM <image>:<tag>