草庐IT

Redis的噩梦:阻塞(JedisConnectionException、以及CPU饱和内存不足等)

  Redis是典型的单线程架构,所有的读写操作都是在一条主线程中完成的。当Redis用于高并发场景时,这条线程就变成了它的生命线。如果出现阻塞,哪怕是很短时间,对于我们的应用来说都是噩梦。导致阻塞问题的场景大致分为内在原因和外在原因:·内在原因包括:不合理地使用API或数据结构、CPU饱和、持久化阻塞等。·外在原因包括:CPU竞争、内存交换、网络问题等发现阻塞:当Redis阻塞时,线上应用服务应该最先感知到,这时应用方会收到大量Redis超时异常,比如Jedis客户端会抛出JedisConnectionException异常。完备的短信监控告警内在原因:API或数据结构使用不合理:通常Red

SQL SERVER数据库服务器CPU不能全部利用原因分析

背景 客户凌晨把HIS数据库迁移到配置更高的新服务器,上午业务高峰时应用非常缓慢,严重影响到业务运行。 1.现象通过SQL专家云实时可视化界面看到大量的绿点,绿点表示会话在等待某项资源,绿点越大说明等待的会话数越多。进入活动会话列表,发现大量会话的状态为runnable,runnable代表这个会话可以执行,但没有 CPU 可以分配给它,可以理解为正在等待 CPU 这项系统资源。但是此时服务器的CPU利用率并不高,在30%左右。从任务管理器里查看,服务器有128核心,但是绝大多数核心根本利用不上。 SQL专家云深度体检里有相应的诊断,SQL Server在线的CPU核数40小于检测到的CPU核

SQL SERVER数据库服务器CPU不能全部利用原因分析

背景 客户凌晨把HIS数据库迁移到配置更高的新服务器,上午业务高峰时应用非常缓慢,严重影响到业务运行。 1.现象通过SQL专家云实时可视化界面看到大量的绿点,绿点表示会话在等待某项资源,绿点越大说明等待的会话数越多。进入活动会话列表,发现大量会话的状态为runnable,runnable代表这个会话可以执行,但没有 CPU 可以分配给它,可以理解为正在等待 CPU 这项系统资源。但是此时服务器的CPU利用率并不高,在30%左右。从任务管理器里查看,服务器有128核心,但是绝大多数核心根本利用不上。 SQL专家云深度体检里有相应的诊断,SQL Server在线的CPU核数40小于检测到的CPU核

DirectX11--CPU与GPU计时器

前言GAMES104的王希说过:游戏引擎的世界里,它的核心是靠Tick()函数把这个世界驱动起来。本来单是一个CPU的计时器是不至于为其写一篇博客的,但把GPU计时器功能加上后就不一样了。在这一篇中,我们将讲述如何使用CPU计时器获取帧间隔,以及使用GPU计时器获取GPU中执行一系列指令的间隔。DirectX11WithWindowsSDK完整目录欢迎加入QQ群:727623616可以一起探讨DX11,以及有什么问题也可以在这里汇报。CPU计时器在游戏中,我们需要用到高精度的计时器。在这里我们直接使用龙书的GameTimer,但为了区分后续的GPU计时器,现在将其改名为CpuTimer:cla

DirectX11--CPU与GPU计时器

前言GAMES104的王希说过:游戏引擎的世界里,它的核心是靠Tick()函数把这个世界驱动起来。本来单是一个CPU的计时器是不至于为其写一篇博客的,但把GPU计时器功能加上后就不一样了。在这一篇中,我们将讲述如何使用CPU计时器获取帧间隔,以及使用GPU计时器获取GPU中执行一系列指令的间隔。DirectX11WithWindowsSDK完整目录欢迎加入QQ群:727623616可以一起探讨DX11,以及有什么问题也可以在这里汇报。CPU计时器在游戏中,我们需要用到高精度的计时器。在这里我们直接使用龙书的GameTimer,但为了区分后续的GPU计时器,现在将其改名为CpuTimer:cla

dotnet 使用 NamedPipeClientStream 连接一个不存在管道服务名将不断空跑 CPU 资源

本文记录一个开发和代码审查过程中,需要关注的细节。在dotnet里,在.NET6和以下版本,包括.NETFramework版本,使用NamedPipeClientStream进行连接管道服务,如果此时的管道服务没有存在,或者还没有启动,调用ConnectAsync或Connect方法,将会进入一个循环,不断进行空跑,等待超时或者是连接上。默认的ConnectAsync或Connect方法,传入的超时时间都是无穷,也就是将会无限重试,不断消耗CPU资源咱可以使用NamedPipeClientStream去连接一个管道服务,从而建立多进程之间的通讯。在连接时,最好是先有管道服务启动,然后再启动管道

dotnet 使用 NamedPipeClientStream 连接一个不存在管道服务名将不断空跑 CPU 资源

本文记录一个开发和代码审查过程中,需要关注的细节。在dotnet里,在.NET6和以下版本,包括.NETFramework版本,使用NamedPipeClientStream进行连接管道服务,如果此时的管道服务没有存在,或者还没有启动,调用ConnectAsync或Connect方法,将会进入一个循环,不断进行空跑,等待超时或者是连接上。默认的ConnectAsync或Connect方法,传入的超时时间都是无穷,也就是将会无限重试,不断消耗CPU资源咱可以使用NamedPipeClientStream去连接一个管道服务,从而建立多进程之间的通讯。在连接时,最好是先有管道服务启动,然后再启动管道

kubernetes top查看内存CPU使用情况

1.top简介k8stop命令我们通常可以基于top命令来查看节点上的资源使用情况,可以带两个参数nodes和pods,通过这个命令分别用于查看节点和pods的资源使用情况,这对于我们快速查看k8s集群以及pod的字样利用率,从而提醒业务或者系统管理人员及时的集群扩容,调整Pod的资源请求。2.metrics-server组件安装top命令依赖于metrics-server组件,需要提前安装才行部署文件:https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml安装:kub

kubernetes top查看内存CPU使用情况

1.top简介k8stop命令我们通常可以基于top命令来查看节点上的资源使用情况,可以带两个参数nodes和pods,通过这个命令分别用于查看节点和pods的资源使用情况,这对于我们快速查看k8s集群以及pod的字样利用率,从而提醒业务或者系统管理人员及时的集群扩容,调整Pod的资源请求。2.metrics-server组件安装top命令依赖于metrics-server组件,需要提前安装才行部署文件:https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml安装:kub

记录一次数据库CPU被打满的排查过程

1前言近期随着数据量的增长,数据库CPU使用率100%报警频繁起来。第一个想到的就是慢Sql,我们对未合理运用索引的表加入索引后,问题依然没有得到解决,深入排查时,发现在orderbyidasclimitn时,即使where条件已经包含了覆盖索引,优化器还是选择了错误的索引导致。通过查询大量资料,问题得到了解决。这里将解决问题的思路以及排查过程分享出来,如果有错误欢迎指正。2正文2.1环境介绍2.2发现问题22日开始,收到以下图1报警变得频繁起来,由于数据库中会有大数据推数动作,数据库CPU偶尔报警并没有引起对该问题的重视,直到通过图2对整日监控数据分析时,才发现问题的严重性,从0点开始,数据