存档

文章标签 ‘LINUX’

Daniel-Journey Weekly Dose –2012/1/30

2012年1月30日 admin 没有评论

Scalability

耗内存应用优化实际案例

Local Cache的小TIP

但本地缓存最大的问题就是数据同步,如果让集中式存储(cache,queue)来通知只会增加复杂度,因此通常最简单的方式就是根据业务数据的敏感度设置不同长短的本地失效时间。但现在如果要设置一个较短的有效期(例如一秒),对于计算机来说已经大大的减轻了压力(1秒对程序来说太久了),但是整体本地缓存对后端保护的效果不佳(特别是后端如果是并发处理能力较弱的系统),如果遇到并发量大的系统,那么就更为突出了。

OOP

Exceptions versus Return Values

深入浅出享元模式

单例模式是邪恶的么?

有状态vs无状态

Stateless or Stateful?
Service objects will usually be stateless. Stateless service layers are highly scalable: They pose no replication issues and there is no need to allocate additional resources for every client. (Remember that one of the key motivations of a middle tier is to share resources between multiple clients.) It is also much easier for stateless service layers to support remote clients, if necessary. A stateless service layer is one concession of object orientation that I find not too painful.

……
If possible, design applications to use a stateless service layer. Hold state in the web tier, rather than in the business logic tier, if possible.

LINUX

简明Vim 练级攻略

free命令中的buffers和cached

Understand UNIX / Linux Inodes Basics with Examples

An Inode number points to an Inode. An Inode is a data structure that stores the following information about a file :

  • Size of file
  • Device ID
  • User ID of the file
  • Group ID of the file
  • The file mode information and access privileges for owner, group and others
  • File protection flags
  • The timestamps for file creation, modification etc
  • link counter to determine the number of hard links
  • Pointers to the blocks storing file’s contents

JAVA

jvm performance tuning (notes)

Thread state transitions diagram

Optimizing ArrayList.removeAll

Performance techniques used in the Hotspot JVM

JAVA线程dump的分析— jstack pid

怎样使用jstack诊断Java应用程序故障

The Commando Pattern

Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Memory Using JDK 1.4.1

Deep dive into assembly code from Java

"java -XX:+PrintOptoAssembly -server -cp . Main". The -XX:+PrintOptoAssembly is the magic option, and with this option I get the following, which shows the code of the "foo" method:

Throwable的fillInStackTrace方法

fillInStackTrace每次执行的时候,会清空原来的栈内的trace信息。然后在当前的调用位置处重新建立trace信息, 所以在方法b()中printStackTrace的执行结果跟c()中的是不一样的。 b()方法被c()调用,c()被a()调用,a()被main()调用, 所以在b()中fillInStackTrace时,栈内会包含b(), a(), main()的信息;而在c()中调用fillInStackTrace时,栈内的信息会被刷新为c(), a(), main()。

java数据结构-HashMap

Oracle时间索引的使用

Rope:理论与实践

Java?言默认的 String和 StringBuilder类很难支撑起操纵大量字符串的系统。rope 数据结构可能是更好的替代品。这篇文章介绍 Ropes for Java,这是针对 Java 平台的 rope 实现;本文还将研究性能问题,并提供一些有效使用 rope 库的指导。

Java Memory  Tips & Tricks

JAVA 基本数据类型长度

java关键字Transient

Java对象的大小

在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句:

Object ob = new Object();

    这样在程序中完成了一个Java对象的生命,但是它所占的空间为:4byte+8byte。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息。因为所有的Java非基本类型的对象都需要默认继承Object对象,因此不论什么样的Java对象,其大小都必须是大于8byte。

   有了Object对象的大小,我们就可以计算其他对象的大小了。

Class NewObject {

    int count;

    boolean flag;

    Object ob;

}

    其大小为:空对象大小(8byte)+int大小(4byte)+Boolean大小(1byte)+空Object引用的大小 (4byte)=17byte。但是因为Java在对对象内存分配时都是以8的整数倍来分,因此大于17byte的最接近8的整数倍的是24,因此此对象的大小为24byte。

这里需要注意一下基本类型的包装类型的大小。因为这种包装类型已经成为对象了,因此需要把他们作为对象来看待。包装类型的大小至少是12byte(声明一个空Object至少需要的空间),而且12byte没有包含任何有效信息,同时,因为Java对象大小是8的整数倍,因此一个基本类型包装类的大小至少是16byte。这个内存占用是很恐怖的,它是使用基本类型的N倍(N>2),有些类型的内存占用更是夸张(随便想下就知道了)。因此,可能的话应尽量少使用包装类。在JDK5.0以后,因为加入了自动类型装换,因此,Java虚拟机会在存储方面进行相应的优化。

说说MaxTenuringThreshold这个参数

在计算存活周期这个阈值时,hotspot会遍历所有age的table,并对其所占用的大小进行累积,当累积的大小超过了survivor space的一半时,则以这个age作为新的存活周期阈值,最后取age和MaxTenuringThreshold中更小的一个值

如希望跟踪每次minor GC后新的存活周期的阈值,可在启动参数上增加:-XX:+PrintTenuringDistribution,输出的信息中的:
Desired survivor size 1048576 bytes, new threshold 7 (max 15)
new threshold 7即标识新的存活周期的阈值为7。

Understanding a Java thread dump

Java Memory Problems

The Top Java Memory Problems – Part 1

The Top Java Memortaiy Problems – Part 2

Hardware

Getting the hang of IOPS

Database

ORACLE数据库事务隔离级

当下列事件发生时,事务就开始了

1、连接到数据库,并执行第一条DML语句

2、前一个事务结束后,又输入了另一条DML语句

NETWOK

记一次TIME_WAIT网络故障

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

Daniel-Journey Weekly Dose –2011/1/16

2012年1月16日 admin 没有评论

SOA

服务治理过程演进

LINUX

如何在Linux下来查看OS系统块的大小

getconf PAGESIZE

Java

logback与Log4J的区别

The Trove library provides high speed regular and primitive collections for Java

Put your fat Collections on a diet!

Java Collection Performance

Java Sequential IO Performance
HotSpot虚拟机对象探秘

Low GC in Java: Use primitives instead of wrappers

There are two good reason to use primitives instead of wrappers where possible.

  • Clarity. By using a primitive, you are making it clear that a null value is not appropriate.
  • Performance. Using primitives is often much faster.

Servlet 3.0 新特性详解

  1. 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。
  2. 新增的注解支持:该版本新增了若干注解,用于简化 Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再是必选的了。
  3. 可插性支持:熟悉 Struts2 的开发者一定会对其通过插件的方式与包括 Spring 在内的各种常用框架的整合特性记忆犹新。将相应的插件封装成 JAR 包并放在类路径下,Struts2 运行时便能自动加载这些插件。现在 Servlet 3.0 提供了类似的特性,开发者可以通过插件的方式很方便的扩充已有 Web 应用的功能,而不需要修改原有的应用。

Architecture

历届「Jolt Awards」获奖书籍

企业应用架构模式

响应性不同于请求处理,它是系统响应请求的速度有多快。这个指标在许多系统里非常重要,因为对于一些系统而言,如果其响应太慢,用户将难以忍受——尽管其响应时间可能不慢。如果能够在处理真正完成之前就给用户一些信息表明系统已经接到请求,则响应性就会好一些。例如,进展条。

一条关于依赖性的普遍原则:领域层和数据源层绝对不要依赖于表现层。

领域逻辑的组织可以分为三种主要的模式:事务脚本、领域模型以及表模块。

事务脚本是这样一个过程:从表示层获得输入、进行校验和计算处理、将数据存储到数据库中以及调用其他系统的操作等。基本的组织方式是让每个过程对应用户可能做的一个动作。所以,我们可以将这一模型想像成一个动作或业务事务的脚本。每一个动作是由一个过程来驱动。

在领域模型中,不再是由一个过程来控制用户某一动作的逻辑,而是由每一个对象都承担一部分相关逻辑。

在许多方面,表模块是事务脚本和领域模型的一个中间地带。它围绕表而非直接围绕过程来组织领域逻辑,提供了更多的结构,而且更容易发现和移除冗余代码。但是,你无法应用许多在领域模型中可以使用的组织细粒度逻辑结构的技术,例如继承、策略和其他面向对象的设计模式。

通常,序列化LOB(大对象Large OBject)对于用来组成应用程序部分的相对独立对象群而言是最好的。但如果过多使用它,最终会把数据库弄得和事务文件系统差不多。

对于任何继承结构,一般都有三种选择。可以为一个层次中的所有类建立一个表,即单表继承;也可以为每个具体类建立一个表,即具体表继承;或者为这个层次中每一个类建立一个表:类表继承。

这三种方法有利有弊。单表继承浪费空间,但避免了连接操作;具体表继承在超类改变时不得不改变所有表,但它也避免了连接操作,允许从一个表取得一个对象;类表继承需要多个连接操作来载入一个对象,这样通常损失了性能,但它是类和表之间最简单的关系。

如果机器处在屏幕流的控制下,那么你就需要应用控制器;如果这台机器是在用户的控制下,你就不要应用控制器。

在视图方面,可以考虑三种模式:转换视图、模板视图和两步视图。

对任何并发程序的本质来说,仅仅考虑正确性是不够的,还必须考虑灵活性(即有多少并发活动可以同时进行)。人们常常需要牺牲一些正确性以获取更多的灵活性,这取决于失败的严重性和可能性以及人们对并发处理数据的需求。

并发问题有两个非常重要的解决方案:一个是隔离(isolation),一个是不变性(immutability)。

在乐观锁和悲观锁之间进行选择的标准是:冲突的频率与严重性。如果冲突很少,或者冲突的后果不会很严重,那么通常情况下应该选择乐观锁,因为它能得到更好的并发性,而且更容易实现。但是,如果冲突的结果对于用户来说是痛苦的,那么就需要使用悲观锁策略。

超时控制和检测机制处理已经出现的死锁,而其他的方法则尽力防止死锁的发生。

跨越多个请求的事务称为长事务。

在请求开始时启动事务,在请求结束时提交事务,这是请求事务。

另一种方法是尽可能晚打开事务。使用延迟事务时,应在事务外完成读取数据的操作,只在修改数据的时候启动事务。然而,这可能会导致不一致读问题。

当可以并发执行并且结果与以某种顺序依次执行的结果相同时,事务就是可串行化的(serializable)。

如果系统中有很多用户,应该考虑使用集群来提高吞吐率。会话迁移(session migration) 允许一次会话从一台服务器转移到另一台服务器,从而可以由一台服务器处理一个请求,其他服务器处理其他的请求。与其相反的方式是服务器亲和(server affinity),它要求某次特定会话的所有请求只能由同一台服务器处理。

分布对象设计第一定律:不要分布使用对象。

这种情况下,怎样有效利用多处理器资源呢?大多数情况下是使用集群系统。在每一个处理器上都部署所有的对象并在其他几个节点上复制它们。这样一来,每个处理器上的对象只需用到本地调用,从而运行更快。还可以使用细粒度接口来设计对象,从而得到更简单的编程模型和更好的可维护性

分类: 阅读 标签: , , ,

Daniel-Journey Weekly Dose –2011/1/8

2012年1月12日 admin 没有评论

Architecture

Event stream processing

Java

使maven2在下载依赖包的同时下载其源代码包

1. 使用maven命令:mvn dependency:sources 下载依赖包的源代码。
2. 使用参数: -DdownloadSources=true 下载源代码jar。 -DdownloadJavadocs=true 下载javadoc包。

Protocol Buffers, Avro, Thrift & MessagePacks

Thread-Local Allocation Buffers 

HotSpot JVM中的垃圾收集

快速分配
从下文对垃圾收集器的描述中可以看出,在许多情况下,内存中都有大块的连续空闲空间用以满足对象的分配请求。这种情形下的分配操作使用简单的“bump-the-pointer”技术,效率很高。按照这种技术,JVM内部维护一个指针(allocatedTail),它始终指向先前已分配对象的尾部,当新的对象分配请求到来时,只需检查代中剩余空间(从allocatedTail到代尾geneTail)是否足以容纳该对象,并在“是”的情况下更新allocatedTail指针并初始化对象。下面的伪代码具体展示了从连续内存块中分配对象时分配操作的简洁性和高效性:
void * malloc(int n){
if( geneTail – allocatedTail < n )

doGarbageCollection();
void * wasAllocatedTail = allocatedTail;
allocatedTail += n;
return wasAllocatedTail;
}
对于多线程应用,分配操作必须是线程安全的。如果使用全局锁为此提供保证,则分配操作必定成为一个性能瓶颈。基于此,HotSport JVM采用了一种被称为“线程局部分配缓冲区”(Thread-Local Allocation Buffers,TLAB)的技术。该项技术为每个线程提供一个独立的分配缓冲区(伊甸区的一小部分),借此来提高分配操作的吞吐量。因为针对每个TLAB,只有一个线程从中分配对象,故而分配操作可以使用“bump-the-pointer”技术快速完成,而不必使用任何锁机制;只有当线程将其已有TLAB填满并且需要获取一个新的TLAB时,同步才是必须的。同时,为了减少TLAB所带来的空间消耗,还使用了一些其他技术,例如,分配器能够把TLAB的平均大小限制在伊甸区的1%以下。
“bump-the-pointer”和TLAB技术的组合保证了分配操作的高效性,类似new Object()这样的操作在大部分时间内只需要大约10条机器指令即可完成

Java线程的6种状态

NEW

至今尚未启动的线程处于这种状态。

RUNNABLE

正在 Java 虚拟机中执行的线程处于这种状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。

BLOCKED

受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。

WAITING

无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。某一线程因为调用下列方法之一而处于等待状态:

1、不带超时值的 Object.wait

2、不带超时值的 Thread.join

3、LockSupport.park

处于等待状态的线程正等待另一个线程,以执行特定操作。 例如,已经在某一对象上调用了 Object.wait() 的线程正等待另一个线程,以便在该对象上调用 Object.notify() 或 Object.notifyAll()。已经调用了 Thread.join() 的线程正在等待指定线程终止。

TIMED_WAITING

具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:

1、Thread.sleep

2、带有超时值的 Object.wait

3、带有超时值的 Thread.join

4、LockSupport.parkNanos

5、LockSupport.parkUntil

TERMINATED

已终止线程的线程状态。线程已经结束执行。

G1 Garbage Collector

Java关于JIT的原理和相关知识

关于Lazy-UnLocking(Reservation Lock)对Java锁的性能优化

关于JVM的Thin Lock, Fat Lock, SPIN Lock与Tasuki Lock

JVM相关知识

TLAB全称叫 Thread Local Allocation Buffer),Sun JDK为了提高对象生成的效率,在Eden哪里为每一个新创建的线程创造一个这么样的空间。TLAB的大小一般都是由JVM 运行计算得出的,但是可以通过-XX:TLABWasteTargetPercent来设置TLAB可占用的Eden Space
的百分比,默认值为1%。
在TLAB分配内存时不需要加锁,因为在堆上分配内存时候要加锁,所以在TLAB分配时效率快很多。当然 这只是适合小对象分配。其分配细节取决于具体的GC。

Windows

Windows 性能监控

perfmon.msc 性能监视器

Windows uses the term “Privileged Time” to represent kernel or system CPU Utilization.

typeperf

利用TypePerf.exe

LINUX

mpstat使用详解

user 在internal时间段里,用户态的CPU时间(%) ,不包含 nice值为负 进程 usr/total*100

nice 在internal时间段里,nice值为负进程的CPU时间(%) nice/total*100

system 在internal时间段里,核心时间(%) system/total*100

iowait 在internal时间段里,硬盘IO等待时间(%) iowait/total*100

irq 在internal时间段里,软中断时间(%) irq/total*100

soft 在internal时间段里,软中断时间(%) softirq/total*100

idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 (%) idle/total*100

intr/s 在internal时间段里,每秒CPU接收的中断的次数 intr/total*100

CPU总的工作时间=total_cur=user+system+nice+idle+iowait+irq+softirq

total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq

user=user_cur – user_pre

total=total_cur-total_pre

其中_cur 表示当前值,_pre表示interval时间前的值。上表中的所有值可取到两位小数点。

使用pidstat命令监视进程

分类: 阅读 标签: , , ,

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 标签: