`
blueswind8306
  • 浏览: 124432 次
  • 来自: ...
社区版块
存档分类
最新评论
文章列表
下面是分析gc日志中,每次ParNew GC时,新生代晋升大小的脚本。这个脚本可以帮助定位某段时间是否有大量新对象产生,导致晋升频繁: cat gc.log |grep " \[ParNew: " |awk '{print $1" "$6" "$9}' |awk -F'K' '{print substr($1,1,29)" "substr($1,31,length($1))" "substr($2,3,length($2))" "substr($4,4,length($4) ...
背景需求 Open-falcon本身自带的dashboard感觉功能不够强大,希望能够接入Grafana做更加丰富、灵活的图形展现。整个安装过程由于在公司服务器上安装,一些依赖包被墙,弄的比较折腾,所以把整个安装过程记录下来。希望对更多的人有帮助。 系统环境及软件版本 操作系统:CentOS 6.6 内核版本:2.6.32-504.el6.x86_64 Open-falcon版本:0.1.0 Grafana版本:PR#3787的patch版本,基于Grafana-2.6 参考资料 Open-falcon支持Grafana的帮助文档 Grafana官方安装文档 Go的安装 在以下地址 ...
记录一个linux内核bug导致的jvm hang住的问题: 最近厂内新上了一批机器,发现在这批机器上有java进程hang住的问题出现,发生问题时jvm会一直卡在minorGC阶段,Eden区一直保持100%并且进程僵尸(有同学反映其它机器也有Survivor一直100% hang住的情况): 进程hang住后,无法用jstack dump栈信息,执行jstack -F后进程恢复服务,minorGC结束。可以看到整个hang住的过程持续了六万多秒: jstack -F dump出来的栈信息所有应用线程都处于BLOCKED状态,没有死锁。当时其实应该用jstack -F -m命令将na ...
最近线上遇到Redis内存达到maxmemory限制后,数据淘汰过慢导致拖慢应用请求的问题。后来仔细看了一下Redis的各种数据淘汰策略,总结一下。 首先,Redis有三种删除key的时机,它们对应不同的淘汰策略: 当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key。 由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key。 当前已用内存超过maxmemory限定时,触发主动清理策略。 下面详细说一下定期主动淘汰策略和主动清理策略,以及它们所对应的配置参数的含义。 定期主动淘汰策略 首先,这里的“定期”指的是Redis定 ...
最近在做redis cluster性能测试过程中,发现当集群吞吐量到达一定程度后(4台12core的redis服务器,80wQPS左右),集群整体性能不能线性增长。也就是说,通过加机器不能提升集群的整体吞吐。以下是详细记录了一下这个case的排查并最终解决的过程。 先来看一个压测图: 上图中每一条线代表一个起压端进程的压测QPS(一台起压机上开4个起压端),可以看到随着起压机的增多,每个起压机的QPS却在下滑。而此时redis的CPU、内存、网卡都还没有跑满。另外尝试增多redis服务器,发现增多一倍服务器后,每台服务器上每个redis实例的CPU大幅降低。总的QPS却基本没有变化。 由于 ...
IO瓶颈往往是我们可能会忽略的地方(我们常会看top、free、netstat等等,但经常会忽略IO的负载情况),今天给大家详细分享一下如何确认一台服务器的IO负载是否到达了瓶颈,以及可能优化、定位的点。 先来看一台典型的IO密集型服务器的cpu统计图: 可以看到,CPU总使用率不高,平均1.3%,max到5.6%,虽然大部分都耗在了iowait上,但才百分之五左右,应该还没到瓶颈吧??? 错了!这里要特别注意:iowait≠IO负载,要看真实的IO负载情况,一般使用iostat –x 命令: $ iostat –x 1 avg-cpu:  %user   %nice %system %io ...
尽量将一些我认为比较精华的东西整理在这里,有些资料还没有来得及读,或者还需要再细读的。有了这个归档索引一下,备忘。 网络通讯 Netty5.0架构剖析和源码解读.pdf 林昊的微信公众账号,有很多性能优化的文章值的学习: 如何编写高效的Java通信客户端 这篇文章后半部分讲到一个典型的网络延迟问题(关闭Nagle算法就可以了): Nagle和DelayedAcknowledgment的延迟问题 编程 Google开源的基础组件库,是对JDK很好的补充: Google Guava解析 并发编程译文,基础篇: Java并发性和多线程介绍 从内存模型角度讲并发: 深入理解java内存模 ...
今天开始接触AKKA,先从官网上把它的两个包下了下来,发现typesafe-activator-1.0.10.zip这个包真是周到到家啊,用开源赚钱的公司,文档及周边服务确实做得好。 可惜的是,AKKA的中文文档奇缺,我找到的仅有的一篇还是基于scala的版本: 基于AKKA的后台应用开发手册 因为项目时间紧张,深入了解scala+AKKA恐怕来不及,所以我就定位在研究AKKA的java版本的研究上了。 在本地把typesafe-activator的应用服务跑了起来,结合Tutorial把第一个HelloAKKAJava.java看明白了。以下是这部分Tutorial的个人翻译,只挑重点译的 ...
最近在公司内部做的一次分享,尽量以一些例子来展现Java可见性、有序性等问题。这方面我也是现学现卖,其中不少内容都引自并发编程网。有兴趣的同学一起讨论吧。以下是PPT地址: Java并发编程分享PPT 示例代码下载
当有很多个文件需要进行处理的时候,我们为了提高程序执行的性能,往往想当然的开多个线程并行执行文件的读/写动作。但是其实这种“想当然”是错误的,下面我们就来看看,对于磁盘IO密集型的应用,多线程到底带来了什么? 首先,我写了一段读文件的程序,这个程序支持用单线程/多线程两种方式读入多个文件,并且记录整个读文件的耗时,最后来比较一下单线程/多线程两种模型在读文件上的性能差别: public class TestMultiThreadIO { /** * @param args * @throws IOException */ public static void ...
在并发编程中,经常会遇到提交多个子任务并行执行的场景。比如一个中心节点同时派发任务给多个子节点,然后中心节点等待所有子节点完成任务后继续主流程。在这个过程中,主节点需要设置一个最大等待超时,当达到超时时间后不再等待未返回的节点结果,做功能降级处理。 对于这种需求,如果子任务是阻塞执行的,则一般会使用一个线程池来执行子任务,但主任务如何唤醒超时呢?直接想到的方式是主任务在提交完所有子任务后进入一个循环,不断判断所有子任务是否已经完成或者到达超时了,但这种方式会导致主任务线程需要频繁唤醒,加大了上下文切换的开销。并且由于子任务是异步执行的,还需要考虑结果对象的安全发布问题,加大了编码的复杂性。 ...
在linux中,我们经常会用到crontab定时执行一些脚本,但脚本的执行时间往往无法控制,当脚本执行时间过长时,可能会导致上一次任务的脚本还没执行完,下一次任务的脚本又开始执行了。这种情况下可能会出现一些并发问题,严重时会导致出现脏数据/性能瓶颈的恶性循环。 针对这个问题,可以使用linux的flock来解决,flock支持共享锁和排它锁,如果一个进程对某个加了排他锁,则其它进程无法加锁,可以选择等待超时或马上返回。 具体可以参考以下两篇文章: Linux 2.6 中的文件锁 flock——Linux 下的文件锁 我在我的CentOS 5.8上做了一个简单的测试: 1.准备一个file ...
某应用服务器涉及很多临时文件的IO操作,同事建议将文件放在tmpfs上以减少磁盘IO,所以在我的开发机上测试了一下tmpfs和磁盘IO的性能对比,确实差异很大: 测试tmpfs的写性能: 17:06 [root@addev]$ time dd if=/dev/zero of=/dev/shm/test bs=8k count=300000        dd: writing `/dev/shm/test': No space left on device 246069+0 records in 246068+0 records out 2015789056 bytes (2.0 GB) c ...
项目中需要将压缩后的二进制数据存入cookie的value中。如果直接将二进制数据存入是不行的,因为cookie规范中规定了一些字符不允许存入: 引用 With Version 0 cookies, values should not contain white space, brackets, parentheses, equals signs, commas, double quotes, slashes, question marks, at signs, colons, and semicolons. Empty values may not behave the same way on ...
最近刚刚调换了团队,所以有一些时间,正好罗列整理一下最近比较关注的知识点,调整一下任务池: redis持久化集群解决方案,包括高可用、数据一致性、单点问题的解决方案 ZooKeeper的深入了解,以储备未来搭建分布式系统的必要条件 JDK7的G1和CMSGC的调研及测评 熟悉lua语言,并了解和redis、nginx的结合能够实现的功能 深入了解rpc调用的成熟解决方案,为分布式系统间调用打基础(包括协议的选择如ProtocolBuffer/Thrift,通讯框架选择如Netty/Grizzly) 其实第一点会依赖于后面的2、4两点:对于ZooKeeper的依赖因为需要保持高可用(心跳检查) ...
Global site tag (gtag.js) - Google Analytics