一次诡异的调优

最近碰到的一个Java应用,费了半天劲还是没定位到是哪儿的问。发上来给大家看看,给点建议。

 

环境

  • DB Server:32core HPUX DB2
  • App Server * 2:8core HPUX WAS6.1 每个节点2个app
初次测试现象
  • WAS,DB2CPU均上不去,CPU、内存、磁盘、网络等都正常。
  • 从loadrunner报告来看,有两个用例很奇怪,在16/24/50用户下,呈线性增长。根据经验,这两个用例可能存在资源争用,造成串行的地方。
  • 检查DB2,正常,语句执行都很快,部分用例有锁,但与造成问题的两个用例无关。


第一次尝试:初步定位是WAS的问题,针对WAS进行排查。
  • 关闭WAS应用打印的日志(据观察有System.out),刚开始有往外打印东西,量不大,但是很频繁,一秒钟大概几十条,无效。
  • 调整WAS监控日志为error,避免过多信息。无效。
  • 后减少用户数,使用1个用户长时间跑,发现那两个用例依旧随时间线性增长。说明问题不是因为资源争用,更可能是程序问题。
  • 检查WAS中的Apache,配置正常,返回页正常。

第二次尝试:定位应用程序哪块的问题
  • 因为WAS跑在HPUX上,使用HPjmeter跟踪线程状态,发现线程在IO上等待事件非常高。而程序占用IO最多的地方就是数据库连接。
  • 打印线程堆栈,发现大部分线程阻塞在SocketRead上。证明了HPjmeter IO占用高。
  • SokcetRead阻塞,可能以下几个地方有问题:数据库(很值得怀疑,但从数据库监控看,没有问题),网络(内网环境,这个应该也不会有问题),操作系统IO部分。
第三次尝试:针对SocketRead定位问题
  • 更新WAS所带JDK,无效。(JDK OK)
  • 更新操作系统IO部分最新Patch,无效。(OS IO OK)
  • 更新WAS的JDBC驱动,无效。(JDBC OK)
  • 把WAS和DB放在同一台机器上,无效。(网络 OK)
  • 通过WAS监控,其中JDBC Time很短(间接也说明了数据库正常),但是UseTime很高(是JDBC Time的100倍+)。
  • 程序除了这两个用例外,其他用例均正常。
悬而未决:问题到这,进了死胡同了。也没有更好的想法。
  • Use Time、JDBC Time、SocketRead的矛盾。
    • JDBC Time=JDBC处理时间+网络时间+数据库处理时间。JDBC Time应该包括了JDBC的SocketRead的时间。但是JDBC Time很小,而程序阻塞在SocketRead上。
    • Use Time=连接分配到连接归还的时间差=n*JDBC Time(在整个连接分配到归还之间的所有JDBC请求)+业务逻辑处理时间。
    • Use Time与JDBC Time差距很大,而且JDBC Time很小,能解释的话,第一种原因,就是在整个UseTime中有大量的JDBC请求,但是从这个业务看,不会有100倍那么多。
    • 第二种原因,是“业务逻辑程序处理时间”占用了很多。这个是有可能的,而且程序编写的bug也能说明为什么在1个用户的时候,用例执行时间也程序线性。但是,程序最耗时的地方出现在JDBC的SocketRead上,而JDBC Time又未反应出这部分的时间。
  • 什么造成了SocketRead阻塞
    • 这个问题一直没有弄清楚,在数据、网络都正常的话,Socket不应该阻塞
  • WAS的Java堆调整。这个问题是在调整WAS时碰到的。
    • WAS个人不是太熟,但是从一般JVM调整来说,基本是类似的,但是这次在WAS上碰到的问题也很诡异。
    • WAS堆之前配置是1560m,当调整为2048m后,用例的执行时间时间反而变长了。WAS堆之前配置是1560m,当调整为1024m后,用例的执行时间时间也变长了。很神奇的问题,程序执行速度一般取决于CPU和IO,内存影响很小,特别当内存足够的情况下。即便内存有影响,两个不同方向的调整居然能得出同样的结果,很令人费解。
    • 不知道是否有WAS方面的大牛给点提示:)
结论
  • 应用应该是有问题的,但是更细的东西或许只有看到代码才知道
  • WAS真不会用...
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
Gateway系统是一个典型的网络架构,它负责整个网络的流量传递和安全保障。然而,在实际应用过程中,Gateway系统常常会存在性能问题,需要进行来提升系统的响应速度和处理能力。下面介绍一次Gateway系统案例。 1. 问题描述 客户的Gateway系统经常出现延迟高和网络拥塞等问题,严重影响了用户体验。经过初步分析,发现问题主要集中在系统内部的负载均衡和安全认证模块 2. 解决方案 针对以上问题,我们提出以下方案: (1)化负载均衡策略:通过化DNS解析和后端服务器的配置,提升负载均衡的效率,避免某些机器过载而导致整个系统出现延迟或拥塞。 (2)升级SSL证书:为了提高安全性,原先的SSL证书采用了较为低端的算法,导致SSL握手速度较慢。我们建议客户升级证书,采用更加安全和高效的算法。 (3)化防火墙规则:原有的防火墙规则较为冗余和复杂,导致了安全认证时的延迟。我们建议客户对规则进行简化和化,提高检查效率,并将协议和服务端口进行明确的配置。 (4)引入缓存机制:针对大量的重复请求,我们建议客户引入缓存机制,以减少请求的次数和响应时间。 3. 成果与评价 经过上述方案的实施,客户的Gateway系统的性能得到了明显提升,延迟和拥塞等问题得到了解决,用户体验得到了极大的改善。同时,我们还给客户提供了后续的技术支持和维护服务,确保系统的稳定和高效运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值