背景昨天,一位朋友找到我寻求帮助。他的项目需要调用一个第三方项目的webAPI。这个webAPI本身可从header,querystring中取相关信息,但同事发现他在调用时,无法按期望的那样从querystring中传参数给到第三方webAPI(webAPI仿佛忽略了从querystring过来的信息),朋友不知道是这个webAPI的问题,还是自己调用代码的问题了。。由于这个webAPIservice是他们公司内部的某team的项目,所以朋友虽然可以看到源码,但他并不能快速确定原因,维护项目的人又不好找。通过webAPIservice代码他自己找到了可疑的原因是webAPI中的这个方法有可能
(本文首发于“数据库架构师”公号,订阅“数据库架构师”公号,一起学习数据库技术)本篇为Redis性能问题诊断系列的第二篇,本文主要从应用发起的典型命令使用上进行讲解,由于Redis为单线程服务架构,对于一些命令如果使用不当会极大的影响Redis的性能表现,这里也会对不合理的使用方式给出优化解决方案。 一、Redis慢日志功能分析Redis访问变慢,其中有个最基础的方法就是先去看Redis是否有慢日志【就像MySQL的慢SQL一样】。Redis提供了一个简单的慢命令统计记录功能,它会记录有哪些命令在执行时耗时较长。Redis慢日志功能由两个核心参数控制:slowlog-log-slower-th
(本文首发于“数据库架构师”公号,订阅“数据库架构师”公号,一起学习数据库技术)本篇为Redis性能问题诊断系列的第二篇,本文主要从应用发起的典型命令使用上进行讲解,由于Redis为单线程服务架构,对于一些命令如果使用不当会极大的影响Redis的性能表现,这里也会对不合理的使用方式给出优化解决方案。 一、Redis慢日志功能分析Redis访问变慢,其中有个最基础的方法就是先去看Redis是否有慢日志【就像MySQL的慢SQL一样】。Redis提供了一个简单的慢命令统计记录功能,它会记录有哪些命令在执行时耗时较长。Redis慢日志功能由两个核心参数控制:slowlog-log-slower-th
背景公司里的某负责保存用户文档的子系统有时会忽然cpu很高,过了大约5分钟后又恢复正常水平。领导协调让我帮看一下(我心里是:不熟悉这个子系统里面的代码,我尽力哈?)其实确实是这样的,如果熟悉出问题的系统的代码,会对诊断问题起到很大的帮助,否则就需要更多的利用对底层的理解了。分析打听后知道了这个子系统用.netcore写的,可以运行在windows和linuxdocker上,且这次的cpu高的问题,他们在windows运行也可复现。于是,我让他们在windows上运行,发现cpu高的时候dump一下。(然后windbg就可以准备下地干活了?)在用windbg看了大部分threadpoolwork
背景公司里的某负责保存用户文档的子系统有时会忽然cpu很高,过了大约5分钟后又恢复正常水平。领导协调让我帮看一下(我心里是:不熟悉这个子系统里面的代码,我尽力哈?)其实确实是这样的,如果熟悉出问题的系统的代码,会对诊断问题起到很大的帮助,否则就需要更多的利用对底层的理解了。分析打听后知道了这个子系统用.netcore写的,可以运行在windows和linuxdocker上,且这次的cpu高的问题,他们在windows运行也可复现。于是,我让他们在windows上运行,发现cpu高的时候dump一下。(然后windbg就可以准备下地干活了?)在用windbg看了大部分threadpoolwork
(本文首发于“数据库架构师”公号,订阅“数据库架构师”公号,一起学习数据库技术,助力职业发展) 本篇为Redis性能问题诊断系列的第四篇,也是最后一篇,主要从应用程序、系统、服务器硬件及网络系统等层面上进行讲解,重点分享了哪些配置需要重点关注和调整优化,才能最大程度的发挥Redis的处理能力; 一、服务器预留足够内存,监控SWAP使用Swap是操作系统层面行为,指当服务器内存不足时,会将原本在内存中的一部分数据拿出放入磁盘,如果再次访问这部分数据就会响应很慢,因为磁盘的访问速度是远远不如内存的。Redis作为内存数据库,有个常识一定要记住:所有的数据默认都是在内存中,不存在一部分在内存一部分在
(本文首发于“数据库架构师”公号,订阅“数据库架构师”公号,一起学习数据库技术,助力职业发展) 本篇为Redis性能问题诊断系列的第四篇,也是最后一篇,主要从应用程序、系统、服务器硬件及网络系统等层面上进行讲解,重点分享了哪些配置需要重点关注和调整优化,才能最大程度的发挥Redis的处理能力; 一、服务器预留足够内存,监控SWAP使用Swap是操作系统层面行为,指当服务器内存不足时,会将原本在内存中的一部分数据拿出放入磁盘,如果再次访问这部分数据就会响应很慢,因为磁盘的访问速度是远远不如内存的。Redis作为内存数据库,有个常识一定要记住:所有的数据默认都是在内存中,不存在一部分在内存一部分在
背景最近一位朋友找到我,让我帮看他们的一个aspnetcoreservice无端cpu高的问题。从描述上看,这个service之前没有出现过cpu高的情况,最近也没有改过实际的什么code。很奇怪了,会有什么变化导致cpu上去了呢?分析由于比较容易复现(据说一启动service,cpu就上去了),我便让那位朋友在cpu高的时候直接手动把.net进程dump了一下。于是就开始用windbg分析了先看一下案发时进程中的线程情况,毕竟它们是让进程动起来的源泉哈。大部分线程都运行到如下类似位置(下面的callstack是虚拟化的,因为为了朋友的隐私,code已经虚拟化): 这里可以看出有约38/2=1
背景最近一位朋友找到我,让我帮看他们的一个aspnetcoreservice无端cpu高的问题。从描述上看,这个service之前没有出现过cpu高的情况,最近也没有改过实际的什么code。很奇怪了,会有什么变化导致cpu上去了呢?分析由于比较容易复现(据说一启动service,cpu就上去了),我便让那位朋友在cpu高的时候直接手动把.net进程dump了一下。于是就开始用windbg分析了先看一下案发时进程中的线程情况,毕竟它们是让进程动起来的源泉哈。大部分线程都运行到如下类似位置(下面的callstack是虚拟化的,因为为了朋友的隐私,code已经虚拟化): 这里可以看出有约38/2=1
上周五客户那边出现了一个很奇怪的故障,刚开始我们以为很简单,一个用户环境的Oracle11g数据库报了一个ORA-4030错误,对于DBA来说,这个错误太常见了,马上联想到物理内存不足了。 不过D-SMART的监控并未产生物理内存不足的告警,从监控指标上看,也没有出现物理内存突然下降的时点。D-SMART的诊断工具中也没有发现任何物理内存不足的情况,从ULIMIT上看也没有看到任何异常,和内存相关的限制都是unlimited。当时有点一头雾水的感觉,这肯定是一个我们以前比较少遇到的场景,并且在我们的运维知识图谱中并没有收录这个故障模型。于是我们再次研究了错误信息,发现OS报错的err