编辑
2024-06-19
工具
00

该文章已加密,点击 阅读全文 并输入密码后方可查看。

编辑
2024-06-19
Docker
00

Docker镜像拉取失败

由于某些原因,Docker Hub官方仓库在国内已经无法拉取,如果是国内网络环境,可配置国内镜像使用,从而解决Docker镜像拉取失败或缓慢问题

image.png

配置Docker镜像源

sh
# 创建目录 sudo mkdir -p /etc/docker # 写入镜像配置 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://registry.cn-hangzhou.aliyuncs.com", "https://dockerhub.azk8s.cn", "https://mirror.ccs.tencentyun.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.m.daocloud.io", "https://noohub.ru" ] } EOF # 重启docker服务 sudo systemctl daemon-reload # 或者重启 # sudo systemctl restart docker # 检查配置 docker info | grep -A 10 'Registry Mirrors'

注:镜像地址建议设置2个以上,因为部分镜像可能更新不及时,导致拉取不到最新tag,但也不宜设置过多,不然反而影响性能

编辑
2024-05-20
工具
00

Java 应用 CPU 占用过高排查手册

当线上 Java 应用出现 CPU 占用过高时,快速定位问题线程并分析其行为至关重要。以下就是一个详细的排查步骤,结合实际日志示例,可方便一步步诊断问题。

一、排查背景

在高并发或复杂业务场景下,Java 应用偶尔会出现 CPU 飙升的情况。这可能是由于代码中存在死循环、不合理的线程同步、频繁的 GC、或是某些耗时操作阻塞了核心线程等原因。及时有效的排查能够帮助我们快速恢复服务,并优化应用性能。

二、排查步骤

1. 识别高 CPU 占用的 Java 进程

首先,我们需要在服务器上找出哪个 Java 进程占用了较高的 CPU。

命令top

操作: 在 Linux 终端执行 top 命令,然后按 Shift + P 以 CPU 使用率排序,找到 CPU 占用较高的 Java 进程,并记录其 PID (Process ID)。

示例日志

text
top - 23:19:57 up 8 days, 5:28, 3 users, load average: 0.25, 0.17, 0.15 Tasks: 230 total, 1 running, 229 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.9 us, 0.6 sy, 0.0 ni, 97.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 7911152 total, 146560 free, 6164640 used, 1599952 buff/cache KiB Swap: 1049596 total, 4 free, 1049592 used. 1185832 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9782 git 20 0 2259716 1.0g 5012 S 5.0 13.6 494:50.66 bundle 31924 root 20 0 820456 16748 2576 S 2.0 0.2 42:02.84 barad_agent 16666 root 20 0 1066072 94192 11436 S 1.0 1.2 120:28.35 YDService 16135 ctm 20 0 3930436 407140 3132 S 0.7 5.1 33:20.42 java <-- 假设这是我们的目标Java进程 8511 git 20 0 1634656 20008 2436 S 0.3 0.3 8:56.97 gitlab-kas 14498 100 20 0 1023052 39656 752 S 0.3 0.5 35:27.95 python 1 root 20 0 194004 5524 3156 S 0.0 0.1 2:30.51 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.16 kthreadd

从上面的示例中,我们假设 PID 16135 (COMMAND java) 是我们要排查的 Java 进程,其 CPU 占用为 0.7%(注意:在实际高 CPU 场景中,这个百分比会显著更高。此处的日志仅为步骤演示。)

编辑
2024-05-07
摘录
00

thin模式的意义

使用thin模式降低spring boot包大小。 也就是说,依赖的那些jar不打到fatjar里。从而把动辄100M以上的包,降低到1M的规模。

为什么要做这个事儿呢?实际上我们项目里依赖的那些jar,版本是不会经常变动的。每次打包都带上,导致我们发布过程要一直带了一些很重的制品大小。 所以thin模式还是有价值和意义的。

其实在很早的时候,我们使用tomcat部署多个war,会把一些公用的jar,比如spring,直接丢到tomcat的lib下,这样这些war就不要带spring的那些依赖jar了,从而实现了war包瘦身的目的。

编辑
2024-04-19
摘录
00

一、什么是 WebSocket

WebSocket 是 HTML5 下一种新的协议(WebSocket 协议本质上是一个基于 TCP 的协议)。它实现了浏览器与服务器全双工通信,能更好地节省服务器资源和带宽并达到实时通讯的目的。WebSocket 是一个持久化的协议。

二、WebSocket 的原理

WebSocket 约定了一个通信的规范,通过一个握手的机制,客户端和服务器之间能建立一个类似 TCP 的连接,从而方便它们之间的通信。在 WebSocket 出现之前,Web 交互一般是基于 HTTP 协议的短连接或者长连接。WebSocket 是一种全新的协议,不属于 HTTP 无状态协议,协议名为 "ws"。

WebSocket 与 HTTP 的关系