自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1881)
  • 收藏
  • 关注

原创 Kubernetes 集群中Coredns域名解析故障排查思路

无论是什么原因,只要是无法解析域名,就按照下面几步进行排查:1)排查Coredns组件的运行状态是否出现异常,查看运行日志获取关键信息。2)查看Node节点的/etc/resolv.conf文件中DNS地址是否配置正确,再进入到Pod中查看/etc/resolv.conf文件中DNS地址是否配置正确。3)通过K8S资源编排文件中的dnsConfig配置参数,手动配置搜索域。

2024-09-23 15:26:25 729

原创 rsyslogd 内存占用很高解决方案

在Kubernetes(K8S)集群中,监控日志是非常重要的,而rsyslogd是Linux系统中用于处理系统和应用程序日志的守护进程。有时候rsyslogd可能会占用较高的内存,这时候我们就需要对其进行优化和调整。1、通过top -c可知,/usr/sbin/rsyslogd -n 占用了大量内存。查看rsyslogd服务配置文件,内存上限设置为8M,然后将绝对内存限制为80M。可以看到目前内存使用量:Memory: 841.2M,超过了80M的限制。2、查看rsyslog 服务,

2024-09-21 14:01:42 318

原创 Kubelet 核心指标监控

就其本质而言,它是在操作系统本身中作为服务运行的代理,与集群中作为 Kubernetes 实体运行的其他组件非常不同。为每个集群节点发现一个目标,其地址默认为 Kubelet 的 HTTP 端口,因此您仍然可以依赖此 Prometheus 角色从您的 Prometheus 实例中抓取 Kubelet 指标。检查 Kubelet Pod 工作器持续时间指标的百分位数也是值得的,这样您将更好地了解不同操作在所有节点上的执行情况。现在,您将看到 Prometheus 实例中可用的 Kubelet 指标。

2024-09-20 14:29:04 1276

原创 kubelet 运行机制、功能 全面分析

如果发现本地的 Pod 被修改,则 Kubelet 会做出相应的修改,比如删除 Pod 中某个容器时,则通过 Docker Client 删除该容器。如果发现删除本节点的 Pod,则删除相应的 Pod,并通过 Docker Client 删除 Pod 中的容器。每个 Kubelet 进程会在 API Server 上注册所在Node节点的信息,定期向 Master 节点汇报该节点的资源使用情况,并通过 cAdvisor 监控节点和容器的资源。Pause 容器用于接管 Pod 中所有其他容器的网络。

2024-09-19 11:23:40 951

原创 RocketMQ集群 双主双从同步模式(2m-2s-sync)搭建

具体物理的保存是保存在broker上面。也就是具体的topic和broker映射关系是保存在nameserver上面的,具体topic对应的消息保存在broker上面。在部署的时候首先要将nameserver启动起来,之后就是将broker启动起来,broker启动起来会将自己的信息注册到nameserver上面。生产者发送完消息了(或者先启动消费者也行),消费者这边也是随机选择nameserver建立长连接,或得topic的信息,它要去连接到broker上面,从broker上面不断的去拉取数据消息。

2024-09-18 21:24:16 903

原创 RocketMQ 基本概念

对于生产者producer来说要将消息发送给某个topic上, 比如消息发送到t1这个topic,t1的topic在broker master1上面,那么消息就会存储在这个topic上面。消息服务或者说整个rocketmq里面所有的功能,这样一个功能,工具,可以使用broker来描述。在broker集群里面会有很多的broker,这些broker要将自己的信息注册到nameserver上面。对于生产者需要将消息发送到某一个topic上,但是实际的消息存储在broker上面,topic是用来区分消息的。

2024-09-14 10:27:39 1217

原创 为什么kubectl top命令查看节点内存使用超过100%?

实际节点内存利用率 = 节点已使用量 / 节点内存总量 = 2413824Ki / 4030180Ki = 59.9%节点内存使用率 = 节点已使用量 / 节点可分配 = 2413824Ki / 2213604Ki = 109%是调用kubelet的metrics API来获取数据的,因此。看到的是节点上已使用的资源总和除以可分配的所有资源。从界面上看节点内存使用率并不是很高,但使用。查看节点内存使用率已超过100%。例如,某节点的参数可通过。

2024-09-13 17:30:01 1102

原创 使用container_cpu_cfs_throttled_seconds_total 来避免Kubernetes CPU Limits造成的事故

本文介绍了limits是如何工作的,以及可以使用哪些指标来设置正确的值,使用哪些指标来进行抑制类型的问题定位。本文的实验提出了一个观点,即过多地配置limits的vCPU数也可能会导致vCPU处于idle状态而造成应用响应延迟,但在现实的服务中,一般会包含语言自身runtime的线程(如go和java)以及开发者自己启动的线程,一般设置较多的vCPU不会对应用的响应造成影响,但会造成资源浪费。

2024-09-13 14:05:19 1304

原创 你真的理解 Kubernetes 中的 requests 和 limits 吗?

为了实现 Kubernetes 集群中资源的有效调度和充分利用, Kubernetes 采用requests和limits两种限制类型来对资源进行容器粒度的分配。每一个容器都可以独立地设定相应的requests和limits。这 2 个参数是通过每个容器 containerSpec 的 resources 字段进行设置的。一般来说,在调度的时候requests比较重要,在运行时limits比较重要。

2024-09-09 18:03:30 1323

原创 Linux 通俗易懂的讲解 Raid0、Raid1、Raid5、Raid10

RAID : 磁盘冗余队列 (Redundant Arrays of Independent Disks )RAID是一种将多个容量较小的磁盘组成一组容量更大的磁盘,并提供数据冗余来保证数据完整性的技术。RAID将普通硬盘组成一个磁盘阵列,在主机写入数据,RAID控制器把主机要写入的数据分解为多个数据块,然后并行写入磁盘阵列;主机读取数据时,RAID控制器并行读取分散在磁盘阵列中各个硬盘上的数据,把它们重新组合后提供给主机。由于采用并行读写操作,从而提高了存储系统的存取系统的存取速度。

2024-09-09 14:48:13 1438

原创 JVM 如何获取当前容器的资源限制?

结合这个日志和代码,我们也可以看到如何获取容器配额,首先从 /proc/self/mounts 中读取对应的资源的 mount 位置,比如 cpu 就是在 / sys/fs/cgroup/cpu,cpuacct:​​​​​​​。一算就知道物理机器有 56 个核心(8+(56-8)*5/8=38),然后使用 +PrintFlagsFinal 看下参数:​​​​​​​。运行同样的程序:​​​​​​​。另外,jdk 8u191 引入了 PrintContainerInfo 参数:​​​​​​​。

2024-09-09 11:14:42 907

原创 7张图带你轻松入门 RocketMQ

RocketMQ 是阿里巴巴的分布式消息,在 2012 年开源,在 2017 年成为 Apache 顶级项目。RocketMQ 的集群架构如下图:Name Server 集群部署,但是节点之间并不会同步数据,因为每个节点都会保存完整的数据。因此单个节点挂掉,并不会对集群产生影响。NameServer 负责维护整个消息队列系统中 Broker 的路由信息,提供轻量级的服务发现和路由功能。

2024-09-09 09:58:42 1089

原创 Rocketmq 概述消息队列的应用场景

在未出现消息队列的时候,这些服务的调用是同步的过程,当出现了消息队列之后会发现已经变成了异步的过程。异步的过程在于提高整个系统的吞吐量。只要消息发送到队列,那么就得到应该Ok的指示。对于上游来说就可以很快的结束业务。对于下游来说,既然已经在消息队列里面了,那么下游可能就不那么追求实时性。不是要立刻执行完才算下单成功,下游拿到这些消息了可以慢慢的,不追求实时的消费,但是可以将消息逐一的进行处理。允许异步的不实时的场景出现。可能在用户进行支付的时候,这些东西都已经创建好了。

2024-09-09 09:57:06 1065

原创 kubernetes Pod failed to create fsnotify watcher: too many open files

fs.nr_open: 控制单个进程可以打开的文件描述符的最大数量。单个进程的文件描述符限制可以通过 ulimit 命令来设置。单个进程能够打开的文件描述符总数的限制。当前系统可打开的最大数量指定用户可以打开的最大数量。

2024-09-06 10:20:17 1172

原创 记一次 OOM内存溢出案例

在linux中,出现killed的原因是系统资源不足或内存不足;当系统资源不足时,Linux内核也可以决定终止一个或多个进程,内存不足时会在系统的物理内存耗尽时触发killed,可以利用“dmesg | tail -7”命令来查看killed日志。

2024-09-05 16:55:12 1926

原创 Kubernetes CoreDNS 无法解析外网域名的问题

宿主机本地的/etc/resolv.conf文件中有两个nameserver是指定的内网的dns,这两个dns解析不到公网域名,coredns又是以轮询的方式去找那几个nameserver的,解析记录的缓存是30s(也就是说,如果你解析到了,那么未来30s的解析都是成功的),30s后再解析,解析请求就会落到那两个内网dns服务器上,所以就出现了我这种情况经过上面的ping测试和nslookup测试,分析发现k8s集群内部pod解析外部域名,先走coredns内部域名解析,再走局域网dns解析。

2024-09-04 16:55:13 1415

原创 prometheus cadvisor 容器相关指标

3、 container_cpu_user_seconds_total与container_cpu_system_seconds_total的总和,代表容器占用CPU的总和。6、 查询容器相关的 数据:查询所有POD的1min内CPU使用情况,用到的数据指标是k8s通过request(下限)和limit(上限)限制容器的CPU和内存的使用范围,在容器运行的过程中需要实时监控容器对cpu的使用情况。1、 容器用户态占用CPU的时间总和。

2024-09-04 10:17:25 1415

原创 Kubernetes 如何给pod的 /etc/hosts文件里面添加条目

上面就是可以将aa/bb.local可以解析为10.1.1.1的地址。cc/dd.local就可以解析为10.1.1.2的地址。可不可以在创建pod的时候指定一些条目在hosts里面?创建pod的时候,pod会在其/etc/hosts里面添加一个条目。这样就完成添加hosts解析了!

2024-08-21 21:31:12 1413

原创 JVM参数 GC线程数ParallelGCThreads合理性设置

JVM启动参数中很多与线程、内存相关。在生产实践中,对这些参数随意设置或者采用默认值可能会有一些风险,特别是在JDK低版本的容器下,可能出现容器CPU过高,GC频繁等。文章列出了这些参数设置方法,并给出常用容器规格的推荐设置。

2024-08-21 17:37:16 1774

原创 linux 安装MAT(MemoryAnalyzerTool),并且分析java dump的方法

当我们的java进程出现异常的时候,我们第一件想做的事情是什么呢?应该就是要分析java的内存了。假如说,我们已经有了一个java内存的dump文件,有哪些的方法,可以对这个导出的dump文件进行分析呢?比如,jhat,mat··· ····但是,其中最能够查明问题的,恐怕就是MAT这个工具了,那么在接下来的部分中,我们就来看看如何在linux环境中,安装、配置mat,并且用这个工具来分析dump文件······

2024-08-21 16:16:10 2058

原创 JavaScript getElementById 使用方法

在JavaScript中,document.getElementById()是一种用于通过元素的id属性获取DOM元素的方法。它的作用是返回与指定id匹配的HTML元素。使用document.getElementById()可以通过元素的id属性直接获取该元素的引用,在标签上定义一个ID,然后JS基于这个ID去调用它。然后可以使用该引用对元素进行各种操作。(1) 修改元素的内容或属性。(3)获取表单元素的值。(2)添加事件监听器。

2024-08-14 16:53:41 1794

原创 kubernetes Pod在容器内获取Pod信息

从日志中我们可以看到Container的requests.cpu、limits.cpu、requests.memory、limits.memory等信息都被正确保存到了Pod的环境变量中。注意valueFrom这种特殊的Downward API语法,目前resourceFieldRef可以将容器的资源请求和资源限制等配置设置为容器内部的环境变量。从日志中我们可以看到Pod的IP、Name及Namespace等信息都被正确保存到了Pod的环境变量中。◎ requests.cpu:容器的CPU请求值。

2024-08-10 15:58:59 2066

原创 Nginx rewrite重写的具体使用

访问重写 rewrite 是 Nginx HTTP 请求处理过程中的一个重要功能,它是以模块的形式存在于代码中的,其功能是对用户请求的 URI 进行 PCRE 正则重写,然后返回 30× 重定向跳转或按条件执行相关配置。

2024-08-10 15:35:08 2283

原创 nginx 405错误是什么意思

当Web服务器收到一个它不支持的HTTP请求方法时,就会返回405错误。405错误通常是由于客户端发出了不兼容或不支持的HTTP请求方法。例如,客户端可能请求一个只能通过GET方法访问的资源,但使用了POST方法。要解决405错误,需要确保客户端发送正确的HTTP请求方法。可以查看服务器文档或使用HTTP请求测试工具来确定正确的请求方法。

2024-08-07 11:27:34 2323

原创 java 性能分析工具jstat讲解

例如,你可以看到在第一次采样时,survivor space 1的使用率是100%,eden space的使用率是76.5%,old space的使用率是68.4%,metaspace的使用率是96.7%,compressed class space的使用率是89.2%。需要注意的是,jstat提供的是实时的性能数据,每次运行jstat时,都会获取最新的数据。一般来说,如果某种类型的垃圾回收发生的次数过多或者花费的时间过长,就说明该类型的垃圾回收可能存在问题,需要优化。

2024-08-01 16:53:38 2762

原创 JVM 性能测试分析工具: jps、jstack、jmap、jhat、jstat、hprof 使用详解

今天这篇文章,我们来一起聊聊在做性能测试常用到的性能分析工具。这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。

2024-07-31 17:03:04 2268

原创 Linux下的nc命令:网络工具的瑞士军刀

在系统中,有许多强大的网络工具可用于网络连接、数据传输和端口扫描。其中一个非常强大的工具是nc,也称为 Netcat,被称为网络工具的瑞士军刀,因为它可以执行各种网络任务。本文将深入探讨nc命令的使用方法,提供详细的示例代码,帮助大家用这个强大的工具。

2024-07-31 13:52:21 1903

原创 Java内存分析工具MAT(Memory Analyzer Tool)的介绍与使用

我们排查内存泄露问题可以主要看app_Leak_Suspects.zip 这个压缩包下的内容。

2024-07-30 09:07:27 1771

原创 Java JVM内存分析工具 jmap

jmap(Java Virtual Machine Memory Map)是JDK提供的一个可以生成Java虚拟机的堆转储快照dump文件的命令行工具。除此以外,jmap命令还可以查看finalize执行队列、Java堆和方法区的详细信息,比如空间使用率、当前使用的什么垃圾回收器、分代情况等等。参数:-dump 生成程序的内存转储快照,用法:-dump: [live,] format = b, file = {fileName}

2024-07-29 09:28:08 3843

原创 containerd 如何成为 Kubernetes 的首选容器运行时

了解了 OCI 规范后,我们再来看看什么是低级和高级容器运行时的区别。了解这些区别有助于我们更好地理解容器运行时的选择和优化,确保在不同的应用场景中能够选择最合适的工具,从而提高系统性能和管理效率。containerd 作为一个轻量级、高性能和稳定的容器运行时,已经成为 Kubernetes 的首选。通过专注于核心功能和深度集成,containerd 为容器管理提供了高效的解决方案。

2024-07-24 15:31:50 2530

原创 Prometheus 监控Tomcat等java应用的状态

5月应用服务出现问题,当别的小伙伴问我,有没有Tomcat等应用状态的监控的时候,我有点儿尴尬。所以赶紧抽空部署一下。在配置之前,就当已经会安装jdk和tomcat了。

2024-07-23 11:14:21 2310

原创 RocketMQ 搭建

Producer:消息的发送者;举例:发信者Consumer:消息接收者;举例:收信者Broker:暂存和传输消息;举例:邮局NameServer:管理Broker;举例:各个邮局的管理机构Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接受者可以订阅一个或者多个Topic消息Message Queue:相当于Topic的分区;用于并行发送和接收消息。

2024-07-19 09:58:42 2542

原创 Java程序CPU持续飙高,如何排查?

之后使用jstack定位有问题代码所在的行。jstack后面接上进程的pid,这样就通过jstack跟踪堆栈,通过grep从堆栈中获取相应的信息。要定位这个java进程当中使用cpu最高的线程。使用top -Hp java进程PID。拿到线程的pid之后,将其转化为16进制。这样可以定位在哪个文件,第几行代码。

2024-07-18 17:05:40 2048

原创 8个步骤彻底清理Docker镜像

镜像积累如山,不仅占用宝贵的磁盘空间,还可能给我们的工作带来不便。今天,就让我带大家深入了解如何高效清理 Docker 镜像,保持我们的开发环境干净整洁。通过上面的分享,相信大家已经对如何清理 Docker 镜像有了更加全面和深入的认识。检查一下这些镜像,评估哪些是必要的,哪些是可以删除的。如果有一系列复杂的清理规则,我们可以编写一个简单的脚本来自动化这个过程。上面的命令会删除所有创建时间超过168小时(7天)的镜像。这样我们可以直观地看到哪些镜像占用空间较大,然后手动删除。那么,今天的内容就到这里。

2024-07-17 17:59:13 2597

原创 Prometheus 监控 Java 应用 JMX Exporter

Java Management Extensions,JMX 是管理 Java 的一种扩展框架,JMX Exporter 基于此框架读取 JVM 的运行时状态。JMX Exporter 利用 Java 的 JMX 机制来读取 JVM 运行时的监控数据,然后将其转换为 Prometheus 可辨识的 metrics 格式,以便让 Prometheus 对其进行监控采集。JMX Exporter 提供启动独立进程及JVM 进程内启动(in-process)两种方式暴露 JVM 监控指标:1.

2024-07-17 16:13:56 2753

原创 JVM 调优参数

XX:TargetSurvivorRatio表示,当经历Minor GC后,survivor空间占有量(百分比)超过它的时候,就会压缩进入老年代(当然,如果survivor空间不够,则直接进入老年代)。而新生代是用来存放新创建的对象,大小是随着堆大小增大和减少而有相应的变化,默认值是保持堆大小的十五分之一,-Xmn参数就是设置新生代的大小,也可以通过-XX:NewRatio来设置新生代与年老代的比例,java 官方推荐配置为3:8。所以如果设置新生代大小的调整,则需要严格的测试调整。在jdk5以上的版本,

2024-07-17 09:19:22 2385

原创 JVM 垃圾回收的几种类型 Minor GC、Major GC、Young GC、Old GC、Full GC、Stop-The-World

等。但这些 GC 术语到底指的是什么,它们之间的区别到底是什么?今天我们就来详细说说。

2024-07-15 13:59:32 2498

原创 ES证书过期替换方案

1.批量下发证书,从各个节点日志可以看出,证书已更新2.集群中的某个节点,重启时,如果自己的证书和其他节点不一致,可以启动但是无法被其他节点识别,无法加入集群直接替换证书,自动就被其他节点识别到,然后节点正常加入集群3.查询命令:查询证书过期验证证书是否有效。

2024-07-13 17:07:57 2658

原创 【无标题】

在所有node节点下,在 /etc/elasticsearch 目录中创建 certs 文件夹将elastic-certificates.p12 文件拷贝到certs 目录下(注:是所有的node节点对应的/etc/elasticsearch/certs)此时,我们还不知道密码是多少,之前都是一路回车的。访问:Kibana,查看认证情况:需要先编辑Kinaba的配置文件(),设置elasticsearch的密码后,重启kibana。如下,按照提示,依次输入和确认密码即可。进入bin目录,执行。

2024-07-13 15:23:23 1616

原创 APIServer 认证 ServiceAccount

的SerivceAccount后,我们来看一下这个ServiceAccount的内容。我们按照前面yaml文件创建Pod,那么apiserver将会把该ServiceAccount的Secret挂载到Pod的路径。然后,然后apiserver的serviceaccount认证器拿到这个ServiceAccountToken后,利用参数。从外部访问Apiserver的安全端口时,客户端需要携带一个身份凭证,能够让apiserver认证为某个用户以及所属的组。我们来看一下这个Secret的内容,如下。

2024-07-12 09:43:13 1961

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除