blog 插件记录

用不惯 mk 这个 blog 插件,这个 tap 不打算维护了。感兴趣的内容看首页或者分类吧。😃

Scrapy 使用记录

一、执行流程

  • 组件说明

    • Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
    • Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
    • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,
    • Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器).
    • Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。
    • Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。
    • Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)
  • 执行流程说明:

    • 引擎:Hi!Spider, 你要处理哪一个网站?
    • Spider:老大要我处理xxxx.com。
    • 引擎:你把第一个需要处理的URL给我吧。
    • Spider:给你,第一个URL是xxxxxxx.com。
    • 引擎:Hi!调度器,我这有request请求你帮我排序入队一下。
    • 调度器:好的,正在处理你等一下。
    • 引擎:Hi!调度器,把你处理好的request请求给我。
    • 调度器:给你,这是我处理好的request
    • 引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求
    • 下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)
    • 引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def parse()这个函数处理的)
    • Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。
    • 引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。
    • 管道调度器:好的,现在就做!

注意!只有当调度器中不存在任何request了,整个程序才会停止,(也就是说,对于下载失败的URL,Scrapy也会重新下载。)

dump文件获取

hprof文件是一种Java堆转储文件(二进制文件),用于分析和诊断Java应用程序的内存使用情况。它包含了Java堆中的对象信息,包括对象的类型、大小、引用关系等。通常情况下,.hprof文件是由Java虚拟机(JVM)生成的,用于记录应用程序在某个时间点的内存快照。

.hprof文件可以提供有关应用程序内存分配、对象泄漏、内存使用量等方面的详细信息。通过分析.hprof文件,开发人员可以确定内存中的对象数量、对象类型、对象之间的引用关系,以及哪些对象可能占用了大量内存或存在内存泄漏的风险。

下面介绍几种获取jvm 堆快照的方法。

零、获取java程序进程id

  • 准备示例程序
curl -O https://arthas.aliyun.com/math-game.jar
java -jar math-game.jar
  • 获取进程id
jps
  • 结果
      jvm jps
    265524 math-game.jar
    268296 Jps
    

聊天机器人

一、先导

QQ官方并没有对个人开发开放基本功能(好像个人申请只能用于QQ频道),加上官方针对开源协议库的围追堵截,非官方的QQ机器人不能100%可靠运行。

但随着官方推出NTQQ统一了各系统,限制局面被打破。

QQ官方最新推出的 NTQQ 客户端使用了 electron 技术,其分为前后端两个部分, 前端是使用 Web 技术开发的 UI 界面供用户交互,后端使用 nodejs addons 技术包装了一个库来处理客户端逻辑和与服务端通信。

我们将NTQQ 客户端前端删除只与后端库交互, 并引出 API 来为我们的Bot服务,即可开启QQ机器人玩法。

记一次netty内存泄漏

一、场景

目前使用基于netty的tcp长连接处理电梯秒级数据。

具体来说是处理电梯的modbus报文,这个主从协议要求获取设备的数据需要主动下发命令来触发上报。在频繁的报文接收、处理及发送中,内存泄漏叻。

二、特征

一般内存泄漏主要表现在服务器内存爆满,某个类实例数特别多、占有内存特别多,GC到不行时服务器自动重启,当然最明显的就是会有leak报错(确定服务器崩的大概时间点,翻下error日志,你会找到的),比如下面这样:

给一块新硬盘举行的欢迎仪式

很久之前写的,刚好最近又用到 https://blog.shafish.cn/archives/1670/

安装好然后虔诚地按下电源开关。

一、定位路径

# 根据容量定位 /dev/sda
sudo fdisk -l

二、进入检测仪式

1.查看硬盘基本信息、检查是否支持SMART测试

sudo smartctl -i /dev/sda

=== START OF INFORMATION SECTION ===
Model Family:     Western Digital Red
Device Model:     WDC WD40EFRX-68NxxNx
Serial Number:    WD-WCC7K4FXPxxR
LU WWN Device Id: 5 0014ee 211f4dd29
Firmware Version: 80.00A80
User Capacity:    4,000,787,030,016 bytes [4.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    5400 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-3 T13/2161-D revision 5
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Thu Jan 14 22:45:01 2021 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
看最后两项满足要求就可以进行各种SMART测试咧。

Trilium笔记

https://github.com/zadam/trilium

一、安装

  • 1.docker本地运行
    docker run -d --name trilium -p 8080:8080 -v /home/xxx/docker/trilium-data:/home/node/trilium-data zadam/trilium:latest
    
  • 2.域名dns解析:https://dns.console.aliyun.com/
  • 3.配置反向代理:宝塔面板
  • 4.域名证书:https://freessl.cn/certlist
  • 5.wss协议升级(使内容实时生效)
    location /
    {
      ...
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      ...
    }
    

PVE使用

🎣

一、显卡直通

https://www.youtube.com/watch?v=5ce-CcYjqe8 https://www.youtube.com/watch?v=BoMlfk397h0&t=915s https://www.youtube.com/watch?v=_JTEsQufSx4 https://gitlab.com/risingprismtv/single-gpu-passthrough/-/wikis/1

# 更新:
nano /etc/apt/sources.list.d/pve-enterprise.list 
# 注释掉 deb https://enterprise.proxmox.com/debian/pve stretch pve-enterprise

echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list

gpg --keyserver keyserver.ubuntu.com --recv-keys 0D9A1950E2EF0603
gpg --export --armor 0D9A1950E2EF0603 | apt-key add -
apt update

echo "options vfio-pci ids=10de:2486,10de:228b  disable_vga=1" > /etc/modprobe.d/vfio.conf
nano /etc/modprobe.d/blacklist.conf
blacklist nouveau
blacklist radeon
blacklist nvidia

nano /etc/modprobe.d/kvm.conf
options kvm ignore_msrs=1

update-initramfs -u

reboot

直通: 1. https://blog.51cto.com/u_12242014/2382885

容器日常

零、安裝

或者直接安装官网安装:https://docs.docker.com/engine/

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
archlinux
# https://wiki.archlinux.org/title/Docker

sudo pacman -S docker docker-compose
yay -S docker-rootless-extras

sudo echo "your_username:165536:65536" > /etc/subuid
sudo echo "your_username:165536:65536" > /etc/subgid

sudo systemctl enable docker
sudo systemctl start docker

export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock