Pinpoint能监控所有运行Java中间件的应用服务器,并通过Agent自动采集调用链数据,覆盖从Tomcat、JBoss到Spring Boot内嵌容器在内的主流部署形态。它监控的是服务器上的应用进程,而非操作系统层面的CPU或内存,在实际运维中,我们说的“监控服务器”往往指代这套Java应用所在的运行环境。
Pinpoint核心监控的服务器类型与Java中间件
Pinpoint的Agent基于Java字节码注入技术,所以它的监控边界非常清晰只要服务器上跑的是符合Java EE标准的中间件,并且JDK版本在6到11之间,就能被完整监控,这里要划个重点:Pinpoint不支持PHP、Python或Node.js服务。
主流的应用服务器支持情况
行业共识认为,Pinpoint对以下服务器的适配最稳定:
- Tomcat 6到9版本:最常见的监控对象,Agent只需放入
bin目录并添加启动参数 - JBoss EAP 6/7:需要调整
standalone.conf中的JAVA_OPTS - WebLogic 10.3及以上:通过修改
setDomainEnv.sh完成接入 - Jetty 9:适合轻量级微服务架构
- Resin 4:部分金融老系统仍在用,Pinpoint支持良好
- Spring Boot内嵌Tomcat:直接以
-javaagent参数启动即可
微服务与容器化服务器的监控覆盖
近年来容器化部署成为主流,很多团队关心pinpoint在Kubernetes环境下的表现。
- Docker容器:Agent注入方式与虚拟机无差异,但需要确保镜像中包含JDK而非仅JRE
- K8s Pod:推荐将Agent打包进镜像,避免动态注入的权限问题
- OpenShift:部分版本需要额外配置SecurityContextConstraints权限
一个容易被忽略的限制:Pinpoint对JDK 12以上版本的支持欠佳,较新版本的Agent虽然有所改进,但遇到Java 17的现代框架时有概率出现采集断点,如果你的服务器跑的是JDK 17,建议先在一台测试机上做链路完整性验证,再决定是否全量接入,这正是pinpoint监控范围排查中最常见的“能装但采不全”的场景。
从调用链角度看清服务器上的应用拓扑
Pinpoint的杀手锏是自动绘制服务端调用关系图,它通过Agent采集的数据展现的不仅是单台服务器状态,而是整个分布式集群的交互逻辑。
服务器间依赖关系可视化
当请求从A服务器的订单服务调用B服务器的库存服务时,Pinpoint的Server Map会实时显示:
- 服务间调用方向:箭头从调用方指向被调用方
- 每秒请求量:箭头上的数值动态刷新
- 平均响应时间:按颜色区分健康度,绿色<1秒,黄色1-3秒,红色>3秒
- 异常调用标记:红色虚线表示超时或报错
这种拓扑视图的价值在于:它帮你一眼定位到是哪台服务器拖慢了整个请求链路。
线程级监控定位服务器性能瓶颈
在Pinpoint的Transaction List页面,可以看到每个请求在服务器内部的线程执行轨迹:
- CPU消耗时间:区分业务逻辑占用还是GC暂停
- 数据库连接获取等待:连接池打满时的典型症状
- 外部HTTP调用阻塞:下游服务响应慢导致当前线程卡住
- 内存分配速率:大对象频繁创建引发Full GC的预警信号
这个功能对排查“服务器CPU不高但接口很慢”的疑难杂症尤其有效。
Pinpoint与Agent部署的服务器资源消耗
考虑接入Pinpoint的团队,除了关心pinpoint能监控哪些服务器,同样要关注监控行为本身对服务器的影响。
Agent对服务器性能的占用范围
衡量一个APM工具是否值得部署,首先要看它消耗多少资源:
| 监控项 | 数据变化 | 说明 |
|---|---|---|
| CPU使用率 | 提升1%-3% | Agent线程负责数据采集,开销与请求量成正比 |
| 内存占用 | 额外分配256MB-512MB | 默认堆内存设置,可按需调整agent.pinpoint配置 |
| 磁盘I/O | 中等写入负载 | 数据先缓冲在内存再异步落盘,HBase写入有压缩 |
| 网络带宽 | 每分钟数十KB | 取决于采样率,生产环境建议调低采样百分比 |
降低Agent开销的实操配置
要减轻监控对业务服务器的干扰,建议按以下方式修改Agent配置文件:
- 编辑
pinpoint.config,将profiler.sampling.rate从默认的1改为5(即5%采样率) - 设置
profiler.jvm.stat.collect.interval=10000,把JVM指标采集周期从5秒延长到10秒 - 在
profiler.entrypoint中排除健康检查类接口,比如/health、/ping路径的监控
多数情况下,经过调优后的Agent资源占用可以控制在业务高峰期的1%CPU和256MB内存以内,对服务器整体性能影响微乎其微。
服务器操作系统与Pinpoint监控的兼容边界
Linux服务器的Agent部署路径
生产环境普遍使用Linux系统,以CentOS 7.9为例,接入步骤清晰明确:
- 下载Agent包并解压到
/opt/pinpoint-agent - 修改Tomcat的
catalina.sh,在JAVA_OPTS中添加:-javaagent:/opt/pinpoint-agent/pinpoint-bootstrap.jar -Dpinpoint.agentId=order-server-01 -Dpinpoint.applicationName=order-service - 重启服务后,在Pinpoint Web界面搜索
order-service即可看到Agent心跳
Windows与Unix系统的特殊说明
Windows下安装Tomcat或Jboss时,Agent参数需要写在setenv.bat中,少数使用AIX系统的金融客户会遇到Agent兼容性问题,这源于IBM J9虚拟机的字节码与Oracle HotSpot存在差异,操作上需要额外调整JVM参数避免注入失败。
如果预算允许,准备一个测试环境先验证Agent的兼容性通常更稳妥,你可以将Agent装在一台与生产配置一致的服务器上,用压测工具模拟业务流量,观察2到3天是否会报错或丢数据。
Pinpoint vs SkyWalking:服务器监控选型对比
在日常技术决策中,经常会有从其它APM迁移到Pinpoint的讨论,两者在监控服务器侧的表现各有侧重:
| 对比维度 | Pinpoint | SkyWalking |
|---|---|---|
| 代码侵入性 | 完全无侵入 | 完全无侵入 |
| 支持语言 | 仅Java | Java、.NET Core、Node.js |
| 数据存储 | HBase | ES、MySQL、TiDB |
| UI可视化 | 调用链和交互式拓扑图功能突出 | 依赖拓扑图更清晰 |
| 性能损耗 | Agent较重 | 相对更轻量 |
| 社区活跃度 | 更新频率一般 | 更新频繁,功能迭代快 |
结合国内主流技术栈兼容性和团队上手难易程度来看,Pinpoint特别适合需要快速定位分布式调用问题的中小团队。
Pinpoint监控服务器的典型落地场景
微服务架构下的全链路追踪
某电商公司将订单、支付、库存拆分为三个独立服务,分布在六台应用服务器上,通过Pinpoint的调用链追踪,团队发现库存服务的数据库连接池配置偏小,高并发时线程等待严重,调整参数后,接口超时率明显下降。
生产故障的快速定位
一套老旧的物流管理系统突然出现间歇性卡顿,运维人员在Pinpoint的Server Map上看到某台服务器的红色告警标记,点开Transaction明细后,定位到是短信网关接口调用超时拖慢了整个流程,整个过程花费不到十分钟,传统的日志排查通常需要耗费数小时。
容量评估与服务器扩容依据
通过Pinpoint查看各服务器每月请求趋势图,可以清晰得出如下结论:
- 哪台服务器的QPS峰值已接近Tomcat线程池上限
- 哪个服务的内存增长速度异常,可能存在内存泄漏
- 哪条调用链的P99延迟持续走高,用户体验受损
这些数据为购买新服务器、调整集群规模提供了可靠依据,比凭经验估算更让人信服。
Pinpoint监控服务器的常见限制与规避方案
不支持非Java服务监控
如果你的架构中有Nginx负载均衡服务器或Redis缓存服务器,Pinpoint无法直接监控这些组件,它与nginx的集成方式仅仅是作为调用链的边界标识:
- Nginx:只显示客户端IP和请求URI,没有内部执行细节
- Redis/Memcached:Pinpoint作为客户端视角记录访问耗时,无法监控缓存服务器的命中率
- MySQL/Oracle:监控的是应用服务器发出的SQL执行耗时,不是数据库本身的运行指标
为弥补这一缺口,不少团队采用“Pinpoint + Prometheus + Grafana”组合方案:Pinpoint负责应用调用链,Prometheus采集中间件指标,Grafana统一展示。
长期运行后数据量膨胀
Pinpoint默认存储全量调用链,生产环境运行数月后HBase会存储数亿条数据,可以设置:
- 通过
hbase.ttl配置数据保留天数(建议30天) - 按天创建HBase表分区,方便过期数据自动清理
- 无损采样率调整为动态值,低峰期100%采样,高峰期自动降为20%
Pinpoint监控效果的关键验证指标
部署完成后,建议从以下维度验证监控是否真正覆盖了业务:
- 应用启动日志:出现
Pinpoint agent started successfully字样 - Web界面Agent状态:显示为
SIGNAL且心跳时间戳频繁刷新 - 调用链完整性:随机抽查一笔交易,从入口到数据库调用每一步都有记录
- 告警有效性:人为将一台服务停止,确认告警通知在1分钟内送达
这些验证步骤能有效确保多台服务器接入后的监控数据真实可用,最大程度避免后续调研时发现主机已离线的情况。
Pinpoint的监控边界就是Java应用的边界。 只要能运行Java Agent,无论是物理机、虚拟机还是容器里的Tomcat或Spring Boot服务,都能纳入全景监控,部署前确认JDK版本和应用类型,按规范接入Agent,你就能获得一张精准的服务器调用关系地图。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/785657.html


