存档

文章标签 ‘LINUX’

Daniel-Journey Weekly Dose –2011/12/31

2011年12月31日 admin 1 条评论

Scalability

CAP理论及BASE思想等

OOP

静态类的原罪

Java

各种java序列化工具性能对比

 

LINUX

linux 统计目录下的文件数量

第一种方法: ls -l|grep "^-"|wc -l ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)。

第二种方法: ls -lR|grep "^-"|wc -l

linux du 显示路径下各子目录大小

du -h –max-depth=1 /backup/

 

通过IOStat命令监控IO性能

  • rrqm/s:队列中每秒钟合并的读请求数量
  • wrqm/s:队列中每秒钟合并的写请求数量
  • r/s:每秒钟完成的读请求数量
  • w/s:每秒钟完成的写请求数量
  • rsec/s:每秒钟读取的扇区数量
  • wsec/s:每秒钟写入的扇区数量
  • avgrq-sz:平均请求扇区的大小
  • avgqu-sz:平均请求队列的长度 。毫无疑问,队列长度越短越好。
  • await:平均每次请求的等待时间。await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
  • svctm:平均每次请求的服务时间。从源代码里可以看出:(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时svctm=1000/(r/s+w/s),假设IOPS是1000,那么svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。
  • util:设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对)。有时候会出现大于100%的情况,这是因为读取数据的时候是非原子操作。
分类: 阅读 标签: , , ,

Daniel-Journey Weekly Dose –2011/12/18

2011年12月19日 admin 没有评论

      JAVA

      JVM收集GC log
      69.713: [GC 11536K->11044K(12016K), 0.0032621 secs]

      从左到右分别是JVM 开始后的秒数和毫秒数的时间戳、执行的收集的类型、GC 之前的堆使用、GC之后堆的使用、总的堆能力和 GC 事件的持续时间

      -XX:+PrintGCDetails

      35.304: [GC 35.304: [DefNew: 28488K->864K(30592K), 0.0027815 secs] 74097K->46473K(98392K), 0.0028799 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]

      “[DefNew: 28488K->864K(30592K), 0.0027815 secs] ”解释一下,是指"新生代"的垃圾回收情况,这里的意思是从占用28488K内存空间变为864K内存空间,用时0.0027815 秒。

      [Times: user=0.02 sys=0.00, real=0.00 secs] 指的是CPU在User模式和系统模式的时间,real是全部消耗的时间

      这三个时间的解释可以参考 http://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1

      -Xloggc:gc.log
        -XX:+PrintGCDetails
        -XX:+PrintGC
        -XX:+PrintGCTimeStamps(GC发生的时间,输出的相对JVM启动的时间)
        -XX:+PrintHeapAtGC
        -XX:+PrintGCDateStamps(PrintGCDateStamps 代替PrintGCTimeStamps,打印出来的是真实的日期)
        -XX:+PrintGCApplicationStoppedTime(GC消耗了多少时间)
        -XX:+PrintGCApplicationConcurrentTime(GC之间运行了多少时间)
        -XX:+PrintTenuringDistribution
              • UseSerialGC is "Serial" + "Serial Old"
              • UseParNewGC is "ParNew" + "Serial Old"
              • UseConcMarkSweepGC is "ParNew" + "CMS" + "Serial Old". "CMS" is used most of the time to collect the tenured generation. "Serial Old" is used when a concurrent mode failure occurs.
              • UseParallelGC is "Parallel Scavenge" + "Serial Old"
              • UseParallelOldGC is "Parallel Scavenge" + "Parallel Old"

              JAVA JVM GC LOG分析和调优【转】

              JDK5.0垃圾收集优化之–Don’t Pause

              编写对GC友好,又不泄漏的代码

              JVM GC日志时间问题

              分类: 阅读 标签: , ,

              LINUX 常用性能分析命令整理

              2011年12月10日 admin 没有评论

              LINUX

              Top 25 Best Linux Performance Monitoring and Debugging Tools

              Linux命令—-分析CPU的瓶颈

              Linux中常用的监控CPU整体性能的工具有:

               mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。

              vmstat:只能查看所有CPU的平均信息;查看cpu队列信息;

              iostat: 只能查看所有CPU的平均信息。

              sar: 与mpstat 一样,不但能查看CPU的平均信息,还能查看指定CPU的信息。

               top:显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示。

              linux cpu相关性能指标

              CPU Utilization,一个很直观的概念,在任意时间内,CPU有7个状态:
              1.idle,表示CPU闲置并等待工作分配.
              2.user,表示CPU在运行用户的进程
              3.system,表示CPU在执行kernel工作
              4.nice,表示CPU花费在被nice改变过优先级的process上的时间(注意:被nice命令改变优先级的process仅指那些nice值为 负的process.花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内,因此整个时间加起来可能会超过百分之百)
              5.iowait,表示CPU等待IO操作完成的时间
              6.irq,表示CPU开销在响应硬中断上的时间
              7.softirq,表示CPU开销在响应软中断上的时间.

              10 Useful Sar (Sysstat) Examples for UNIX / Linux Performance Monitoring

              sar [options] [-A] [-o file] t [n]
              在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有
              的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式
              存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命令
              的选项很多,下面只列出常用选项:
              -A:所有报告的总和。
              -u:CPU利用率
              -v:进程、I节点、文件和锁表状态。
              -d:硬盘使用报告。
              -r:内存和交换空间的使用统计。
              -g:串口I/O的情况。
              -b:缓冲区使用情况。
              -a:文件读写情况。
              -c:系统调用情况。
              -q:报告队列长度和系统平均负载
              -R:进程的活动情况。
              -y:终端设备活动情况。
              -w:系统交换活动。
              -x { pid | SELF | ALL }:报告指定进程ID的统计信息,SELF关键字是sar进程本身的统计,ALL关键字是所有系统进程的统计。

              24 iostat, vmstat and mpstat Examples for Linux Performance Monitoring

              UNIX / Linux: 7 Practical PS Command Examples for Process Monitoring

              ps -ef, ps –aux List Currently Running Processes
              ps -u, ps –C List the Process based on the UID and Commands
              ps -p, ps –ppid List the processes based on PIDs or PPIDs
              ps –forest List Processes in a Hierarchy
              ps –L List all threads for a particular process

               

              15 Practical Linux Top Command Examples

              Display Absolute Path of the Command and its Arguments – Press c

              Linux TOP命令 按内存占用排序和按CPU占用排序

               

              分类: LINUX 标签:

              Daniel-Journey Weekly Dose –2011/12/4

              2011年12月4日 admin 没有评论

              Scalability

              深入浅出Flashcache(一)

              投资

              趋势是什么?总听到人说“顺势而为”,其实很多人并没搞清楚。股市的趋势是要分时间周期的,对以周为单位的人来说,最近3周的趋势无疑是下跌的;对于以日为单位的人来说,上周4的日内趋势就是上涨。因此请先确定你的操作频率,以周为单位应该做空,以日为单位在上周4就应该做多,都是可以盈利的!

              欧债危机到底是怎么回事

              Java

              java nio 之MappedByteBuffer

              理解Heap Profling名词-Shallow和Retained Sizes

              Shallow Size
              对象自身占用的内存大小,不包括它引用的对象。
              针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。
              针对数组类型的对象,它的大小是数组元素对象的大小总和。

              Retained Size
              Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)
              换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
              不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。

              LINUX

              理解Inode

              Architecture

              关于复杂事件处理和事件驱动架构的争论

              EDA: Event-Driven Architecture事件驱动架构

              高性能队列Fqueue的设计和使用实践

              Java读写

              BufferedOutputStream虽然最快,但是易丢失数据,权衡之下,我们选择了MappedByteBuffer作为我们的文件操作实现

              Daniel-Journey Weekly Dose –2011/11/19

              2011年11月20日 admin 没有评论

              投资

              【股民必看炒股口诀】1、下降通道只能瞧, 价量齐跌不能要。空头均线难走好, 长期盘整等它翘。2、密集成交不太妙, 主力抛压退为好。看法一致壁上瞧, 市场冷门没人要。3、股评力荐利润少, 走势怪异远离跑。基本面上选股票 , 学会简直不得了。4、日常生活是学校, 前人经验不可少。

              营销

              网络营销sem十五种模式大PK

              『B2C电商平台的邮件营销策略』对比各种网络营销手段,邮件营销获取新用户的成本相对较低,像淘宝获取一个新购买用户的成本为30元,卓越或当当网的成本约为80元。凡客通过邮件营销获得的收入占总收入的20%,走秀网是19%左右,而做邮件营销要解决三件事情:邮件发送渠道、邮箱数据来源和邮件内容策略。

              Java

              深入分析Java I-O的工作机制

              OOP

              Proxy模式与Decorator模式的区别

              Java Decorator Pattern Example

              LINUX

              Linux如何测试Inode使用情况

              使用df -i命令可以看到每个分区的总inode数目和被使用的以及空闲的inode数目

              find ~ -name "*.log" | xargs -L rm

              注意不能直接通过rm命令删除,因为rm命令是将被删除的文件作为一个又一个参数传递进来的,当被删除的文件过多时,容易导致出现参数过长的错误提示:arg list too long

              让你提升命令行效率的 Bash 快捷键 [完整版]

              • Ctrl + a :移到命令行首
              • Ctrl + e :移到命令行尾
              • Ctrl + f :按字符前移(右向)
              • Ctrl + b :按字符后移(左向)
              • Alt + f :按单词前移(右向)
              • Alt + b :按单词后移(左向)
              • Ctrl + xx:在命令行首和光标之间移动
              • Ctrl + u :从光标处删除至命令行首
              • Ctrl + k :从光标处删除至命令行尾
              • Ctrl + w :从光标处删除至字首
              • Alt + d :从光标处删除至字尾
              • Ctrl + d :删除光标处的字符
              • Ctrl + h :删除光标前的字符
              • Ctrl + y :粘贴至光标后
              • Alt + c :从光标处更改为首字母大写的单词
              • Alt + u :从光标处更改为全部大写的单词
              • Alt + l :从光标处更改为全部小写的单词
              • Ctrl + t :交换光标处和之前的字符
              • Alt + t :交换光标处和之前的单词
              • Alt + Backspace:与 Ctrl + w 相同类似,分隔符有些差别 [感谢 rezilla 指正]

               

              网络

              TCP/IP Protocol Fundamentals Explained with a Diagram

              7 Linux Grep OR, Grep AND, Grep NOT Operator Examples

              操作系统

              我理解的进程和线程的区别

              分类: 阅读 标签: , , , , , ,

              Daniel-Journey Weekly Dose –2011/10/01

              2011年10月2日 admin 没有评论

              Linux iostat监测IO状态

              2011年9月25日 admin 没有评论

              命令格式

              iostat用于输出CPU和磁盘I/O相关的统计信息.
              命令格式:

              iostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ device [ ... ] | ALL ]
              
              [ -p [ device | ALL ]  ] [ interval [ count ] ]

               

              参数说明

              -c 仅显示CPU统计信息.与-d选项互斥.
              
               -d 仅显示磁盘统计信息.与-c选项互斥.
              
               -k 以K为单位显示每秒的磁盘请求数,默认单位块.
              
               -p device | ALL
              
                与-x选项互斥,用于显示块设备及系统分区的统计信息.也可以在-p后指定一个设备名,如:
              
                # iostat -p hda
              
                或显示所有设备
              
                # iostat -p ALL
              
               -t    在输出数据时,打印搜集数据的时间.
              
               -V    打印版本号和帮助信息.
              
               -x    输出扩展信息

               

              输出项说明

              Blk_read   读入块的当总数.
              
              Blk_wrtn   写入块的总数.
              
              kB_read/s  每秒从驱动器读入的数据量,单位为K.
              
              kB_wrtn/s  每秒向驱动器写入的数据量,单位为K.
              
              kB_read    读入的数据总量,单位为K.
              
              kB_wrtn    写入的数据总量,单位为K.
              
              rrqm/s     将读入请求合并后,每秒发送到设备的读入请求数.wrqm/s     将写入请求合并后,每秒发送到设备的写入请求数.
              
              r/s        每秒发送到设备的读入请求数.
              
              w/s        每秒发送到设备的写入请求数.
              
              rsec/s     每秒从设备读入的扇区数.
              
              wsec/s     每秒向设备写入的扇区数.
              
              rkB/s      每秒从设备读入的数据量,单位为K.wkB/s      每秒向设备写入的数据量,单位为K.
              
              avgrq-sz   发送到设备的请求的平均大小,单位是扇区.
              
              avgqu-sz   发送到设备的请求的平均队列长度.
              
              await      I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒.
              
              svctm      发送到设备的I/O请求的平均执行时间.单位是毫秒.
              
              %util      在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率.当这个值接近100%时,表示设备带宽已经占满.

              1. 基本使用

              $iostat -d -k 1 10

              参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。

              2. -x 参数

              使用-x参数我们可以获得更多统计信息。

              rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。

              rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second;

              await:每一个IO请求的处理的平均时间(单位是毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。

              %util:在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

              3. -c 参数

              iostat还可以用来获取cpu部分状态值:

              4. 常见用法

              $iostat -d -k 1 10 #查看TPS和吞吐量信息

              iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)

              iostat -c 1 10 #查看cpu状态

              参考资料

              iostat参数说明

              Linux iostat监测IO状态

              http://www.php-oa.com/2009/02/03/iostat.html

              iostat来对linux硬盘IO性能进行了解

              分类: LINUX 标签:

              Daniel-Journey Weekly Dose- 2011/8/7

              2011年8月7日 admin 没有评论

              投资

              “闪电打下来时你必须在场”——彼得.林奇

              美国1926年到1996年长达70年的资本市场,上涨的月份只有7%,其他的月份都是下跌或者是横盘。真正的投资者,只有在93%时间里要熬得住,才能抓住这7%的时间。

               

              A股市盈率:998点16.44倍;1664点12.69倍;2319点16.43倍;11年1月25日2661点17.41倍;剔除金融板块A股PE为23.88倍。昨天8月4日上交所公布的PE16.05倍!目前PE离1664差20%,如跌到1664PE对应点位是2122点。16倍是估值底,12倍是铁底!2000点一线是绝对铁底不会破!

              观后镜人性的弱点:2008年让大家认识到本金的安全性是第一位的,然后2009年股指翻倍。2009年让大家认识到牛市谁也跑不赢沪深300,然后2010年小股票结构性行情。2010年让大家认识到消费新兴和小股票才是硬道理,然后2011年蓝筹白马股领涨。投资人总是不断总结,只可惜是从观后镜中总结。—邱国鹭

              “即使最优秀的棒球击球员也只有30%的成功几率。在股市中,没有一个短线投资者可以永远正确。事实上,如果一个短线投资者在自己的投资失误的交易上迅速止损,那么即使他在10次交易中只有3~4次的正确几率,他也能够赚到大钱。”—投资大师巴鲁克

               

              Linux

              理解Linux系统负荷

               

              NOSQL

              http://blog.nosqlfan.com/html/2720.html

              分类: 阅读 标签: , ,

              Daniel-Journey Weekly Dose-2010/11/20

              2010年11月20日 admin 4 条评论

              Java

              Standard System Properties

              通过Java/JMX得到full GC次数?

              防痴呆设计

              检查重复的jar包

              检查重复的配置文件

              检查所有可选配置

              日志信息包含环境信息

              异常信息给出解决方案

              kill之前先dump

              Scalability

              如何解决cache同时过期问题

              Linux

              Linux知识学习(11)Tar命令压缩文件

              压缩:tar -cvf
              解压:tar -xvf
              查看:tar -tvf
              如果tar包被gzip压缩过,在命令选项中多加一个’z'即可。

               

              程序员

              项目经理的思维批判

              怎样把自己培养成为一个优秀的程序员

              从经理的角度看技术债务

              技术债务来自哪里

              • 没有经验的开发人员
              • 项目工期的压力
              • 凌乱而难读的代码。
              • 专业领域的代码。
              • 过度复杂
              • 糟糕的设计

                解决问题

              • 让开发人员接受语言方面的基本培训并教授他们面向对象的原理,从而把他们的理解力提升至入门阶段。要想既成功又有效的话,这需要花几个礼拜的时间培训,还需要有精通这方面的人员来跟进和支持这一系列培训。
              • 告诉开发人员和管理人员,当前的这些问题都是需要花费企业资金的。这点尤其重要,因为它会使解决这些问题的意义更加明确。你要清楚地告诉他们,管理人员会重视这些问题,并且已经开始着手偿还这些技术债务了。不断支持这些工作使之成为常规的原则之一,这样整个团队就会信任这个准则。
              • 提供一些培训,包括代码的坏味道,重构,单元测试和测试驱动开发等。还可以结合课堂会议,基于网络的材料和书籍来进行培训。
              • 在工作的时候,给他们一些空余时间去研究和练习他们的技能(一个礼拜两个小时应该是达成这个目标的最小的时间量)。练习的代码应该被丢弃,这样,他们就能无拘无束地尝试和试验一些事情,不管怎么样,他们不用在基础代码库上面进行练习。花点时间练习和研究应该是最有用的建议了。假如没有为他们提供空闲的时间,就压根不会发现真正合理的敏捷开发方式。这种组织方式也被称为“道场”-Dojo(更加详细的资料可以参考TDD Randori Session TDD Randori Workshop)。
              • 使用工具(静态分析,单元测试,持续集成,自动化可接受性测试)来帮助团队发现、减少和衡量他们的技术债务量。应该在团队层面利用这些度量数据,而不能分享给管理人员。团队成员需要知道,他们并不会因为对这些技术债务的度量而接受奖励或者遭受惩罚。如果我们把这些度量数据报告给管理层,并由管理层来追踪的话,开发人员很快会找到一些窍门来规避它们,这样就失去了本来应有的价值了。
              • 当人们完成了他们的培训或者在技术上取得了少许提升时,应该得到奖励。奖励可以是给予一次认可的表彰或者是一些小小的礼物,但不要直接给予现金奖励。
              • 每两个礼拜进行一次午餐聚会和一些关于技术方面的学习型会议。利用这些会议来促进开发成员之间的讨论。提供午餐可以提高参会人数。另外比较重要的是需要管理人员每次都来出席,这样就很清楚的表明他们也一直支持大家提高技术。
              • 维护关于技术债务的备忘录 – 任何时候,如果开发人员发现一些无法立即应付的技术债务时,就需要填写一份技术债务登记卡。开发人员应该优先考虑这些技术债务,并花费10-15%的精力来偿还这些技术债务。大多数项目中,任何的一些小事都会使问题变得更加严重

              OO & Design Pattern

              超越设计模式

              Daniel-Journey Weekly Dose-2010/10/24

              2010年10月24日 admin 9 条评论
              分类: 阅读 标签: ,