- 浏览: 341996 次
- 性别:
- 来自: 北京
最新评论
-
bbls:
有用有用有用
java-jvm-jstack-(监视器和锁的概念) -
王新春:
小侠有点帅哦 写道此流怎么关闭新春这个实现 可以不关闭的,哈哈 ...
源码剖析之java.io.ByteArrayOutputStream -
小侠有点帅哦:
此流怎么关闭新春
源码剖析之java.io.ByteArrayOutputStream -
cumt168:
写的很好为什么初始化参数,年轻代-Xmn10M def new ...
jvm之内存申请过程分析 -
ronin47:
应该是跟共享域名思路差不多,根据cookie的key作判断
跨域:一种通过服务端解决跨域的实现
文章列表
java : http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html
protobuf 简介:是一种序列化与结构化数据的一种机制,具有跨平台、解析速度快、序列化数据体积小、扩展性高、使用简单的特点
目标:验证protobuf序列化的内存占用量低于Java的直接序列化
java的实现:
public static void serialize(Serializable obj, OutputStream outputStream) {
if (outputStream == ...
下面这段jstack的栈信息里,有一个死锁
其中:
Thread-1 持有 0x00000007d5df4970,等待获取:0x00000007d5df4960
Thread-0 持有 0x00000007d5df4960,等待获取:0x00000007d5df4970
所以导致了死锁的出现
两个线程都有有一句: java.lang.Thread.State: BLOCKED (on object monitor)
表明:两个线程都阻塞在了 对应正在操作对象的object monitor上(是因为对象 被另外一个线程获加锁成功,并占有object monitor)
那obj ...
常见的线程状态:
RUNNABLE:正在执行的线程
注意:这里执行是针对jvm来说的,并非真的在cpu上执行,这要看操作系统处理器是否有机会
BLOCKED:阻塞的线程
注意:阻塞的线程一般是拿不到监视器锁(a monitor lock),比如:synchronized block/method,ReentrantLock.lock()
jstack一般显示为:
"Thread-0" prio=6 tid=0x000000000b67f800 nid=0x40d0 waiting on condition [0x000000000da7f00 ...
jstack Dump 日志文件中的线程状态
dump 文件里,值得关注的线程状态有:
死锁,Deadlock(重点关注)
执行中,Runnable
等待资源,Waiting on condition(重点关注)
等待获取监视器,Waiting on monitor entry(重点关注)
1、通过top命令发现 cpu高的进程
根据top命令,发现PID 为22143的Java进程占用CPU 17.8%
2、根据cpu高的进程,查找引起cpu高的线程
命令:ps -mp 22143 -o THREAD,tid,time|sort -k1 -nr|head -15方案二:
top -H -p pid 这样是是看pid对应下的线程对应的的cpu 占用率,可以定位到cpu高的线程
(这个图是后补的)
3、收集进程的堆栈信息上下文
jstack -F pid >data.txt 即可把线程的堆栈信息统计到 文件中
注意:jstack -F 这个 ...
zookeeper 收藏文章
- 博客分类:
- zookeeper
http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
zookeeper 配置解析(收藏)
- 博客分类:
- zookeeper
zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg。其中各配置项的含义,解释如下:
1.tickTime:CS通信心跳数
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000
2.initLimit:LF初始通信时限集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
zookeeper 集群搭建
- 博客分类:
- zookeeper
目标:搭建一个zk的集群(5个节点)
zk的下载:
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
解压:
tar -xvf zookeeper-3.4.9.tar.gz
可执行脚本简介:
zkCleanup—清理ZooKeeper历史数据,包括事物日志文件和快照数据文件。
zkCli—ZooKeeper的一个简易客户端。
zkEnv—设置ZooK的环境变量。
zkServer—ZooKeeper服务的启动、停止和重启脚本。
添加m ...
Serializable:java默认序列化的功能,必须实现Serializable接口
实现Serializable 接口的类,虚拟机会默认添加一个ServialVersionUID 属性
1、SerialVersionUID默认值的计算:根据类的各个方面得来的(属性,方法等)
1,Redis
丰富的数据结构(Data Structures)
字符串(String)
Redis字符串能包含任意类型的数据
一个字符串类型的值最多能存储512M字节的内容
利用INCR命令簇(INCR, DECR, INCRBY)来把字符串当作原子计数器使用
使用APPEND命令在字符串后添加内容
列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序
你可以添加一个元素到列表的头部(左边:LPUSH)或者尾部(右边:RPUSH)
一个列表最多可以包含232-1个元素(4294967295,每个表超过40亿个元素)
在社交网 ...
redis-sentinel:
redis作为一个存储系统,可靠性非常重要,为此redis提供了哨兵的功能来检测master状态,并在master实例异常的时 实现主从库的切换,被集成在2.4以上的版本。
首先 redis-sentinel 是redis官方自带的工具,用于管理多个Redis服务器实例,使用的时候只需要启动若干个sentinel实例即可
其次redis-sentinel 是暴露服务的,可以通过spring-data-redis 等现有的工具做切换。
过程以及效果:
1. 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务 ...
Redis复制工作原理:
1. 如果设置了一个Slave,无论是第一次连接还是重连到Master,它都会发出一个SYNC命令;2. 当Master收到SYNC命令之后,会做两件事:a) Master执行BGSAVE,即在后台保存数据到磁盘(rdb快照文件);b) Master同时将 ...
不变设计模式:不变模式的用意是对象生成之后就不能再改变了
尤其在多并发程序中:为确保数据的一致性和正确性,又必要对对象进行同步,但是同步操作对系统性能有相当的损耗。因此可以使用一种不可改变的对象,依靠其不变形来确保并行操作在没有同步的情况下依旧保持一致性和正确性。
保持对象不可变的手段:
1、基本类型 ,final修饰 或者 不提供set方法
2、引用类型(包括集合类型),深copy(容器类)
举例:guava中有不变模式的实现:
com.google.common.collect.ImmutableList<E>
com.google.commo ...
Spring的事务本身是基于AOP的
AOP代理自动创建器:InfrastructureAdvisorAutoProxyCreator
beanname:org.springframework.aop.config.internalAutoProxyCreator
事务AOP:BeanFactoryTransactionAttributeSourceAdvisor
beanName: org.springframework.transaction.config.internalTransactionAdvisor:
事务advice:TransactionI ...
事务隔离级别的语义:当前事务执行过程中,通过select,update,delete 操作,对其他事务的影响,反过来也是如此,通俗的说就是 当前事务是否可以看到其他事务的操作结果。
1、如何查询当前数据库的隔离级别(我们只讨论mysql的事务隔离级别)
select @@tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@global.tx_isolation;
//设置
set tx_isolation='read-committed';
2、不同隔离级别的影响
ANSI/ISO SQL标准定义了4中事 ...