windows 上命令行做 tcpdump

平时生成机器都是 Linux, 但是有时候也会碰到 Windows. 在桌面环境下使用 wireshark 非常方便, 可是有些 prod 机器很难装 wireshark, 因为各种网络限制. 不过还是可以通过一些命令行工具做出 tcpdump. 这里就介绍如何使用 WinPcap & WinDump 做出 tcpdump. 并且使用 windows 剪贴板从本地复制到生产环境.

- 阅读剩余部分 -

Java 静态方法的返回值泛型使用与调用 static method generic return type and invoke

泛型(generic)类型在 Java 中使用特别频繁, 尤其在各种集合类(Collection)中. 一般如果自定义的类要使用泛型, 那么需要在类定义的时候, 声明泛型, 如:

public class MyClass<T> {...}

那么, 如果想在类的静态方法里上使用泛型, 以及如何在调用的时候, 传入泛型类型呢?

- 阅读剩余部分 -

使用apache httpclient 默认连接池导致的系统瓶颈问题

现今的 Java 开发基本都会使用开源的开发框架, 它们都经过很多人的验证, 包含了很多成熟的最佳实践. 另外这些框架中经常包含一些可调的参数, 如果不读官方文档, 调节参数, 默认的参数可能由于不太适应真正的业务需求, 导致应用出现某些瓶颈问题.

症状

有告警显示某些 web 服务器的 Tomcat busy threads 横躺在了最大值上, 成了一条直线段. 如下图:
busyThreadMax.png


- 阅读剩余部分 -

诊断 Java 由 Synchronizer 和 AQS 混合组成的死锁

死锁问题在 SRE 的日常的应用诊断中, 经常遇到. 遇到的大多数, 都是通过 thread dump 里面明显看到的, 因为 thread dump 默认会在最后打印出 JVM 识别出来的死锁. 对于使用 AQS 锁的情况, 获得的锁就不会打印在 thread dump 里面. 这时候, 就需要分析具体的堆栈的情况去具体识别. 这里就展示一个这样的案例.

症状:

首先, 报警显示有个机器的 Tomcat 服务线程被用光了, 已经无法再接受新的请求. 该应用其它server还是正常工作, 所以判断只是这个 server 走火入魔, 陷入了困境.
tomcatThreadsMax.png


- 阅读剩余部分 -