说明:这里列出的都是一些相对独立的工具或者命令,不包括像 ZK、Redis 这样的服务,以及像 Spring 这类的框架。这些工具都是各自类型中最常用的,但不是以全面为目的。

团队协作工具

acdeb4dc4fdce4d33b5cca14079936ef.png

Ant+ivy、Maven、Gradle 都是用来构建项目、管理依赖的工具。其中 Ant 通过直接引用 jar 文件来进行依赖管理,通过脚本来描述,执行不同的构建目标。目前 Ant 使用得已经比较少,Maven 是比较主流的项目管理工具。

  • Maven 通过 POM 文件对项目进行描述,通过约定提供可执行的目标,通过 GroupId、artifactId、version等坐标对依赖关系进行管理,Maven 可以从远程或本地仓库中自动下载依赖。

  • Gradle 是结合了 Ant 与 Maven 优点的自动化构建工具,基于 Groovy 的 DSL 也就是领域专用语言。既有 Ant 的强大和灵活,又有 Maven 的生命周期管理,可以自动下载依赖。目前使用 Gradle 管理项目的团队也越来越多。

  • Git 和 SVN 都是版本管理工具,最主要区别是 SVN 是集中式的,Git 是分布式的,分支管理更灵活。目前 SVN 使用的已经相对较少了,Git 是大部分互联网公司使用的版本管理工具,后面的详解部分会专门针对 Git 的使用及 Git 工作流进行讲解。

质量保证工具

质量保证类工具有 CheckStyle、FindBugs、SonarQube 等等。

cfe788975d135d1c051c672f17d08993.png

  • CheckStyle、FindBugs 是静态代码检测工具,可以通过 IDE 集成,对本地代码进行检测。

  • SonarQube 是代码质量管理平台,默认集成了前面提到的两种工具,比较适合对项目质量进行整体保障。

压测工具

压测工具类有 LoadRunner、JMeter、AB、JMH。

94c5da43930abca13b8fd1fcb4079748.png

  • LoadRunner 和 JMeter 都是比较专业的测试工具,可以提供专业的报表和数据分析,比较适合 QA 人员使用。

  • AB 是 Apache 提供的一个简洁方便的压测工具,比较适合研发人员对 HTTP 接口进行简单并发压测。

  • JMH 主要是针对 JVM 进行基准测试,更关注方法层面的性能基准,如果想知道方法在两种不同实现下的吞吐量,就可以使用 JMH。对于应聘 Java 研发岗位的同学来说,测试工具部分可以重点了解一下 JMH。

容器与代理工具

容器与代理部分,目前主流的 Java Web 容器是 Tomcat,主流的代理是 Nginx。不过这里要多了解一些趋势,就是随着微服务的盛行,Envoy、OpenResty、Kong、Zuul 等的 API Gateway 网关的使用也越来越普遍。随着 DevOps 理念的普及,CI/CD 也就是持续集成、持续部署,也越来越被大家所重视,这部分我们需要知道比较常用的 Jenkins 和 GitLab CI。

ea51223429545fbc3ccffa07486ea555.png

  • Jenkins,老牌的持续集成框架,可以支持不同类型的项目的构建、测试、部署,支持丰富的插件功能,和易用的管理界面。

  • GitLab CI 作为 GitLab 提供的一个持续集成的套件,完美和 GitLab 进行集成,更加简单易用,比较适合 CI 流程比较简单的项目。

  • Travis 和 CircleCI 都是开源项目中比较常用的持续集成框架,如果是研发开源项目可以进一步了解这两个框架的使用方式。

文档管理工具

  • JavaDoc 通过注解方式,来对 Java 类和方法进行描述,并生成描述文档。

  • Swagger 是一个规范、完整的框架,用于生成、描述 RESTful API,Swagger 支持多种语言,提供了可视化的 Swagger UI,Java 中 Swagger 使用注解方式描述接口、参数、返回值等,非常适合用来对 RESTful 接口进行管理,特别是跨语言的 Web 服务。

网络工具

服务之间一般都要通过网络进行交互,所以工程师在调试、排查问题时需要掌握常用的网络工具。 这里介绍几种常用网络工具。

  • Postman 是调试网页的 Chrome 插件,相当于一个客户端,可以模拟用户发起的 HTTP 请求,是高效的接口测试工具,非常适合用来对 HTTP 接口进行联调与测试。

  • Wireshark 是个功能强大的网络包分析工具,支持各种协议的网络包分析,可以直接抓包,也可以配合 tcpdump 来使用,分析 tcpdump 抓包的结果。例如分析 HTTP 服务发、收包时间,链接的建立、关闭过程,请求包的分包大小与时序,TCP 窗口大小等等。

  • Fiddler 只针对 HTTP 请求进行抓包,可以修改请求或者模拟慢网速,是 Web 前端、移动端调试的利器,Charles 与 Fiddler 功能类似,支持 mac 系统,比较适合移动端抓包使用。

Linux 工具

来看 Linux 系统下常用的分析工具。首先是如下图表格中列出的 stat 系列。

2763cbfa349df30e4b5ad04d79c00bcb.png

  • vmstat 可以获得有关进程、内存页面交换、虚拟内存、线程上下文切换、等待队列等信息。能够反映系统的负载情况。一般用来查看进程等待数量、内存换页情况、系统上下文切换是否频繁等。

  • iostat 工具可以对系统的磁盘操作活动进行监视,同时也可以显示 CPU 使用情况,一般用来排查与文件读写有关的问题,例如排查文件写入耗时较高时,可以查看 await 和 util 是否过高。iotop 是查看磁盘 I/O 使用状况的 top 类工具,想知道到底哪个进程产生了大量的 IO 时可以使用 iotop。

  • ifstat 是简洁的实时网络流量监控工具,可以查看系统的网络出口、入口使用情况。

  • iftop 可以用来监控网卡的实时流量、反向解析 IP、显示端口信息等,通过 iftop 很容易找到哪个 IP 在霸占网络流量。

  • netstat 是一个监控系统网络状态的工具,它可以查看网络连接状态,监听了哪些接口、链接相关的进程等信息,能够显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,是非常常用的网络工具。

  • dstat 是一个全能实时系统信息统计工具,能够统计 CPU 占用,内存占用,网络状况,系统负载,进程信息,磁盘信息等等,可以用来替换 vmstat、iostat、netstat 和i fstat 这些工具。

再来看如下图的几个工具。

52cb43ef4359f79483965dbb276fe9dc.png

  • strace 是一个用于诊断、调试程序运行时系统调用的工具,可以动态跟踪程序的运行,能够清楚地看到一个程序运行时产生的系统调用过程及其使用的参数、返回值和执行耗时。

  • JVM 执行 native 方法时,可以很方便的通过 strace 来进行调试,例如在执行系统读写时,线程卡住很长时间,就可以用 strace 来查看系统调用的参数和耗时。

  • GDB 是一个强大的命令行调试工具,可以让程序在受控的环境中运行,让被调试的程序在指定的断点处停住,也可以动态的改变程序的执行环境。当 JVM 因为未知原因 crash 时,可以通过 GDB 来分析 crash 时产生的 coredump 文件,来分析定位问题。

  • lsof 是一个列出当前系统打开文件的工具。Linux 中一切皆文件,包括设备、链接等都是以文件形式管理的,因此通过 lsof 工具查看文件列表对系统监测以及排错都很有帮助。

  • tcpdump 是一个强大的网络抓包工具,在分析服务之间调用时非常有用。可以将网络中传送的数据包抓取下来进行分析。tcpdump 提供灵活的抓取策略,支持针对网络层、协议、主机、网络或端口的过滤,并提供 and、or、not 等逻辑语句来去掉不想要的信息。

  • traceroute 是一个网络路由分析工具,利用 ICMP 协议定位本地计算机和目标计算机之间的所有路由。traceroute 对服务,特别是经过公网的服务之间的网络问题排查非常有帮助。

还有重要的 JVM 工具和 Git,你不得不知的那些事儿,戳次条,今天一次性搞定它!

04d31a0b4f97968370ceea33fd99ae9a.png

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐