0%

RocketMQ找不到Broker节点

1
2
3
4
5
6
7
vim /app/rocketmq/4.9.1/conf/broker.conf
# 添加ip信息
namesrvAddr = 192.168.186.61:9876
brokerIP1 = 192.168.186.61

# 启动时脚本指定配置文件
nohup /app/rocketmq/4.9.1/bin/mqbroker -c /app/rocketmq/4.9.1/conf/broker.conf > /app/rocketmq/4.9.1/logs/broker.log 2>&1 &

Redis Cluster 修复

节点fair,没有可用槽位

1
2
3
4
5
6
7
8
9
redis-cli -a xxx -c -h 192.168.186.xx -p xxx
# 查看节点状态
cluster info
# 查看节点信息
cluster nodes
# 手动添加节点
cluster meet 192.168.186.xx xxxx
# 修复槽位
redis-cli -a xxx --cluster fix 192.168.186.xx:xxxx

Mysql 8.0 开启外网访问

配置修改

1
2
3
4
# vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 注释掉这两行
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1

权限设置

mysql 8.0 更换了默认认证插件

1
2
3
4
5
mysql -uroot
USE mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'passw';
grant all privileges on *.* to 'root'@'%';
flush privileges;
阅读全文 »

垃圾收集算法

分代收集理论

当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是通过对象存活周期的不同将内存分为几块。一般将JAVA堆分为新生代和老年代 ,这样我们就可以根据各个年代的特点选择合适的垃圾手机算法。

比如在新生代,每次手机都会有99%的对象死去,所有我们可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存货几率是比较高的,而且没有额外的空间对它进行担保,所以我们必须选择标记-清除算法或者标记-整理算法进行垃圾收集。

注意:标记-清除算法 或 标记-整理算法 会比 复制算法 慢10倍以上!

阅读全文 »

类加载全过程

当我们使用Java命令启动一个类的main()方法时,首先需要通过类加载器将主类加载到JVM中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.weiba.jvm;

public class Math {
public static final int initData = 666;
public static User user = new User();

public int compute() { //一个方法对应一块栈帧内存区域
int a = 1;
int b = 2;
int c = (a + b) * 10;
return c;
}

public static void main(String[] args) {
Math math = new Math();
math.compute();
}

}

通过Java命令执行代码的大体流程

loadClass 加载过程

阅读全文 »

由于部分同事在测试环境启服务时常常不改服务名称且ip直接配置成localhost,导致很多服务调用时会连接异常,但又找不到人,为此我写了一个脚本来定位服务的真实ip。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
# export PATH=$PATH:/bin:/sbin:/usr/sbin

if [ ! -n "$1" -o ! -n "$2" ]; then
echo "请在脚本后输入参数:注册中心端口号 目标服务端口号"
exit 1
fi

PID=$(netstat -tunlp | grep $1 | grep java | awk '{print $7}' | awk -F '/' '{print $1}')

echo "端口$1所属进程PID为:${PID}"

ips=$(lsof -p ${PID} -nP | grep TCP | awk '{print $9}' | awk -F '->' '{print $2}' | awk -F ':' '{print $1}' | grep -v '^$' | sort | uniq)

for i in ${ips}; do
nc -z -w 2 ${i} $2 >> /dev/null 2>&1
result=$?
if [ ${result} != 0 ]; then
echo -e "${i}:$2 \t 端口关闭"
else
swagger="http://${i}:$2/swagger-ui.html"
cr=$(curl -I -m 10 -o /dev/null -s -w %{http_code} ${swagger})
if [ ${cr} != 200 ]; then
desUrl="manager - http://${i}:$2/"
else
desUrl="microservice - ${swagger}"
fi
echo -e "${i}:$2 \t 端口开放 <-- ${desUrl}"
fi
done

GitHub 访问速度不佳, 在Nas上部署一套Hexo

编写DockerFile

本来是打算看看有没有合适的镜像的, 不是太大, 就是配置太麻烦, 干脆自己自定义一个算了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
FROM node:16.0.0-alpine

# 设置代理, 后边装依赖要用
ENV http_proxy http://192.168.186.210:7890
ENV https_proxy http://192.168.186.210:7890

WORKDIR /usr/local

# alpine中什么都没有, 需要单独安装
RUN apk update && apk add bash && apk add git
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

RUN unset http_proxy && unset https_proxy

# hexo端口
EXPOSE 4000

# 这个脚本后面可以自己替换
COPY start.sh /usr/local/start.sh
RUN chmod +x /usr/local/start.sh
CMD ["/bin/bash", "-c", "./start.sh"]

start.sh

1
2
3
4
5
6
#!/bin/bash
if [ ! -d "/usr/local/xweiba.github.io" ]; then
git clone -b source https://github.com/xweiba/xweiba.github.io.git&&npm config set registry https://registry.npmmirror.com&&npm install hexo-cli -g
fi
cd /usr/local/xweiba.github.io
git pull --force&&npm install&&hexo clean&&hexo s
阅读全文 »

Puppeteer项目配置

注意事项:

  • CentOS 7 以下不支持 Puppeteer
  • Puppeteer 服务需能够访问被打印的页面
  • 请先确保字体安装成功,否则会导致PDF渲染异常

字体安装

安装 fontconfig mkfontscale

1
yum -y install fontconfig mkfontscale
阅读全文 »

Docker 数据迁移

主机是lxc的,只分配了10G,安装 office 镜像空间不够,将 Docker 数据迁移到硬盘上。

  1. 停止 Docker
    1
    2
    systemctl stop docker.socket
    systemctl stop docker
  2. 拷贝数据
    1
    2
    3
    cp -a /var/lib/docker /mnt/nas/application/docker
    mv /var/lib/docker /var/lib/docker-old
    ln -s /mnt/nas/application/docker /var/lib/
  3. 启动测试, 删除原数据
    1
    2
    3
    systemctl start docker
    systemctl status docker
    rm -rf /var/lib/docker-old

可道云

使用内置nginx,代理相关服务

1
2
3
4
5
6
7
8
9
10
11
docker run -d \
--name cloudfile \
--dns 192.168.186.210 \
-p 12880:12880 \
-e PUID=1000 -e PGID=1000 \
-v /mnt:/mnt \
-v /root/.acme.sh:/root/.acme.sh \
-v /mnt/nas/application/nginx/etc/nginx/sites-enabled:/etc/nginx/sites-enabled \
-v /mnt/nas/application/nginx/etc/nginx/password:/etc/nginx/password \
-v /mnt/nas/application/kodcloud/kodbox/data:/var/www/html \
--restart always kodcloud/kodbox:latest

nginxwebui

ng配置编辑服务

1
2
3
4
5
6
7
8
docker run -itd  \
--name ngweb \
-e BOOT_OPTIONS="--server.port=12881" \
-p 12881:12881 \
-e PUID=1000 -e PGID=1000 \
-v /mnt/nas/application/nginx/etc/nginx/:/etc/nginx/ \
-v /root/.acme.sh:/root/.acme.sh \
--restart always cym1102/nginxwebui:latest
阅读全文 »