存档

文章标签 ‘Windows’

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/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日志时间问题

              分类: 阅读 标签: , ,

              Daniel-Journey Weekly Dose-2010/11/7

              2010年11月7日 admin 1 条评论

              Java

              JAVA线程dump的分析 — jstack pid

              • 在 windows环境中,在启动程序的控制台里敲: Ctrl – Break,线程的 dump会产生在标准输出中( 缺省标准输出就是控制台,如果对输出进行了重定向,则要查看输出文件)。
              • 在 unix, linux和 MacOS 环境中,在控制台中敲: Ctrl-\,或者,;  用 “kill -3 <pid>” ,或者 “kill – QUIT <pid>”。 Pid是用所关注的 JAVA进程号,您可以用 “ps -ef | grep java” 找到;或者使用 JDK 5.0中的 “jps -v” 命令获得。
              • 在各个操作系统平台,都可以用 JDK 5.0工具包中的 jstack <pid>

              Programming

              每位开发人员都应铭记的10句编程谚语

                1. 无风不起浪
                2. 预防为主,治疗为辅
                3. 不要孤注一掷 (过度依赖某人)
                4. 种瓜得瓜,种豆得豆
                5. 欲速则不达
                6. 三思而后行
                7. 如果你惟一的工具是一把锤子,你往往会把一切问题看成钉子
                8. 沉默即赞同
                9. 双鸟在林,不如一鸟在手
                10. 能力越大,责任越大

                Scalability

                Amdahl定律

                分布式服务框架常被质疑的价值

                Other

                Windows命令行窗口日志输出重定向方法

              Daniel-Journey Weekly Dose-2010/9/20

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

              Windows下的grep——findstr

              2010年1月15日 admin 没有评论

              linux下的grep具有强大的文本检索能力,其实在windows下也有一个类似的命令findstr

              D:\>findstr /?
              在文件中寻找字符串。

              FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/F:file]
                      [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
                      strings [[drive:][path]filename[ ...]]

                /B        在一行的开始配对模式。
                /E        在一行的结尾配对模式。
                /L        按字使用搜索字符串。
                /R        将搜索字符串作为一般表达式使用。
                /S        在当前目录和所有子目录中搜索
                            匹配文件。
                /I         指定搜索不分大小写。
                /X        打印完全匹配的行。
                /V        只打印不包含匹配的行。
                /N        在匹配的每行前打印行数。
                /M        如果文件含有匹配项,只打印其文件名。
                /O        在每个匹配行前打印字符偏移量。
                /P        忽略有不可打印字符的文件。
                /OFF[LINE] 不跳过带有脱机属性集的文件。
                /A:attr   指定有十六进位数字的颜色属性。请见 "color /?"
                /F:file   从指定文件读文件列表 (/ 代表控制台)。
                /C:string 使用指定字符串作为文字搜索字符串。
                /G:file   从指定的文件获得搜索字符串。 (/ 代表控制台)。
                /D:dir    查找以分号为分隔符的目录列表
                strings   要查找的文字。
                [drive:][path]filename
                          指定要查找的文件。

              除非参数有 /C 前缀,请使用空格隔开搜索字符串。
              例如: ‘FINDSTR "hello there" x.y’ 在文件 x.y 中寻找 "hello" 或
              "there" 。  ‘FINDSTR /C:"hello there" x.y’ 文件 x.y  寻找
              "hello there"。

              一般表达式的快速参考:
                .        通配符: 任何字符
                *        重复: 以前字符或类别出现零或零以上次数
                ^        行位置: 行的开始
                $        行位置: 行的终点
                [class]  字符类别: 任何在字符集中的字符
                [^class] 补字符类别: 任何不在字符集中的字符
                [x-y]    范围: 在指定范围内的任何字符
                \x       Escape: 元字符 x 的文字用法
                \<xyz    字位置: 字的开始
                xyz\>    字位置: 字的结束

              有关 FINDSTR 常见表达法的详细情况,请见联机命令参考。另外windows下还有一个简化版的findstr——find可以使用.

              分类: 应用软件 标签: