草庐IT

一次线上OOM问题的个人复盘

原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。上个月,我们一个java服务上线后,偶尔会发生内存OOM(OutOfMemory)问题,但由于OOM导致服务不响应请求,健康检查多次不通过,最后部署平台kill了java进程,这导致定位这次OOM问题也变得困难起来。最终,在多次review代码后发现,是SQL意外地查出大量数据导致的,如下:and`outer_id`=#{outerId}and`order_type`=#{orderType}...select*fromorder查询逻辑类似上面的示例,在Service层有个根据outer_id的查询方法,然

一次线上OOM问题的个人复盘

原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。上个月,我们一个java服务上线后,偶尔会发生内存OOM(OutOfMemory)问题,但由于OOM导致服务不响应请求,健康检查多次不通过,最后部署平台kill了java进程,这导致定位这次OOM问题也变得困难起来。最终,在多次review代码后发现,是SQL意外地查出大量数据导致的,如下:and`outer_id`=#{outerId}and`order_type`=#{orderType}...select*fromorder查询逻辑类似上面的示例,在Service层有个根据outer_id的查询方法,然

使用dotnet-monitor sidecar模式 dump docker运行的dotnet程序.

前情概要随着容器和云技术的发展,大量的应用运行在云上的容器中,它们的好处是毋庸置疑的,例如极大的提高了我们的研发部署速度,快速的扩缩容等等,但是也存在一些小小的问题,例如难以调试.基于VM的部署我们可以通过安全的方式登录到主机上做一些你想做的事情,但是云上的容器那就是不太方便了(目前AWS的ECS已经有类似dockerexec的方式直接进入容器中了,其他的云未作了解).但是就算能进入容器也不意味着调试就好做了,通常来说使用的镜像都是经过优化和精简的(如果要调式可能需要安装大量的组件).所以,接下来介绍一下使用dotnet-monitor来内存转储(memorydump)运行在容器中的dotne

使用dotnet-monitor sidecar模式 dump docker运行的dotnet程序.

前情概要随着容器和云技术的发展,大量的应用运行在云上的容器中,它们的好处是毋庸置疑的,例如极大的提高了我们的研发部署速度,快速的扩缩容等等,但是也存在一些小小的问题,例如难以调试.基于VM的部署我们可以通过安全的方式登录到主机上做一些你想做的事情,但是云上的容器那就是不太方便了(目前AWS的ECS已经有类似dockerexec的方式直接进入容器中了,其他的云未作了解).但是就算能进入容器也不意味着调试就好做了,通常来说使用的镜像都是经过优化和精简的(如果要调式可能需要安装大量的组件).所以,接下来介绍一下使用dotnet-monitor来内存转储(memorydump)运行在容器中的dotne

分布式存储系统之Ceph集群状态获取及ceph配置文件说明

  前文我们了解了Ceph的访问接口的启用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16727620.html;今天我们来聊一聊获取ceph集群状态和ceph配置文件说明相关话题;  Ceph集群状态获取常用命令  1、ceph-s:该命令用于输出ceph集群系统状态信息  提示:ceph-s主要输出有三类信息,一类是集群相关信息,比如集群id,健康状态;第二类是服务类相关信息,比如集群运行了几个mon节点,几个mgr节点,几个mds,osd和rgw;这些服务都处于什么样的状态等等;我们把这些信息称为集群运行状况,它可以让我们一目了然的了解

分布式存储系统之Ceph集群状态获取及ceph配置文件说明

  前文我们了解了Ceph的访问接口的启用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16727620.html;今天我们来聊一聊获取ceph集群状态和ceph配置文件说明相关话题;  Ceph集群状态获取常用命令  1、ceph-s:该命令用于输出ceph集群系统状态信息  提示:ceph-s主要输出有三类信息,一类是集群相关信息,比如集群id,健康状态;第二类是服务类相关信息,比如集群运行了几个mon节点,几个mgr节点,几个mds,osd和rgw;这些服务都处于什么样的状态等等;我们把这些信息称为集群运行状况,它可以让我们一目了然的了解

MySQL 官方出品,比 mydumper 更快的多线程逻辑备份工具-MySQL Shell Dump & Load

mysqldump和mydumper是我们常用的两个逻辑备份工具。无论是mysqldump还是mydumper都是将备份数据通过INSERT的方式写入到备份文件中。恢复时,myloader(mydumper中的恢复工具)是多线程导入,且一个INSERT语句中包含多条记录,多个INSERT操作批量提交。基本上,凡是我们能想到的,有助于提升导入速度的,myloader都会使用或有选项提供。单就恢复速度而言,可以说,myloader就是逻辑恢复工具的天花板。既然如此,还有办法能继续提升逻辑恢复工具的恢复速度么?毕竟,备份的恢复速度直接影响着灾难发生时数据库服务的RTO。答案,有!这个就是官方在MyS

MySQL 官方出品,比 mydumper 更快的多线程逻辑备份工具-MySQL Shell Dump & Load

mysqldump和mydumper是我们常用的两个逻辑备份工具。无论是mysqldump还是mydumper都是将备份数据通过INSERT的方式写入到备份文件中。恢复时,myloader(mydumper中的恢复工具)是多线程导入,且一个INSERT语句中包含多条记录,多个INSERT操作批量提交。基本上,凡是我们能想到的,有助于提升导入速度的,myloader都会使用或有选项提供。单就恢复速度而言,可以说,myloader就是逻辑恢复工具的天花板。既然如此,还有办法能继续提升逻辑恢复工具的恢复速度么?毕竟,备份的恢复速度直接影响着灾难发生时数据库服务的RTO。答案,有!这个就是官方在MyS

一次k8s docker下.net程序的异常行为dump诊断

背景昨天,一位朋友找到我寻求帮助。他的项目需要调用一个第三方项目的webAPI。这个webAPI本身可从header,querystring中取相关信息,但同事发现他在调用时,无法按期望的那样从querystring中传参数给到第三方webAPI(webAPI仿佛忽略了从querystring过来的信息),朋友不知道是这个webAPI的问题,还是自己调用代码的问题了。。由于这个webAPIservice是他们公司内部的某team的项目,所以朋友虽然可以看到源码,但他并不能快速确定原因,维护项目的人又不好找。通过webAPIservice代码他自己找到了可疑的原因是webAPI中的这个方法有可能

一次k8s docker下.net程序的异常行为dump诊断

背景昨天,一位朋友找到我寻求帮助。他的项目需要调用一个第三方项目的webAPI。这个webAPI本身可从header,querystring中取相关信息,但同事发现他在调用时,无法按期望的那样从querystring中传参数给到第三方webAPI(webAPI仿佛忽略了从querystring过来的信息),朋友不知道是这个webAPI的问题,还是自己调用代码的问题了。。由于这个webAPIservice是他们公司内部的某team的项目,所以朋友虽然可以看到源码,但他并不能快速确定原因,维护项目的人又不好找。通过webAPIservice代码他自己找到了可疑的原因是webAPI中的这个方法有可能