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的重度玩家(window上的截图软件都是qq 笑),而且一直有用qq做日常记录的习惯,比如日常看到的一些博文或者拿来保存一些手机截图、文件等等。但是!!qq现在我的电脑都只是提供互传功能,并没有记录查询这些玩意,就有很多以前分享过的东西不翻翻就忘了或者记得是分享过一个什么玩意,但翻记录就是翻不出来! 无奈

问题一直都在,想着到时再说,恰巧去年折腾博客的时候弄了一个笔记系统,也就是trilium,它功能非常丰富,但当时也是一时热度,用了几周就没继续,主要是平时长点的记录用现在的博客,一些零碎的也不会特意打开trilium网站记录,至于用trilium手机端记录什么的也没那么好体验,要用小屏做笔记,系统自带的笔记软件是最好用的。

现在只要把qq消息记录到trilium这流程打通,一切就很舒服了!

记一次netty内存泄漏

一、场景

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

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

二、特征

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

trojan

一、简介

技术开发少不了使用代理,因为国内的站点存在大量且重复的各种资料备份,但只有一手的wiki才能精准解决问题,且让你印象深刻。墙这玩意以前觉得是封锁,但久了才会发现这确实是个保护罩。具体其他自己慢慢摸索吧

这里介绍下trojan的客户端部署,之前都是手动安装trojan,改下配置文件就直接用(刚好有三个小鸡就对应安装在台式机、笔记本和pve上)。但由于jia'jing'pin'qiong,对家里台式机的上钟时间稍微做了限制,导致台式机配置的代理对内网用不了,又不可能单纯为此开个虚拟机。

所以就有了这篇内容,可以用docker部署trojan客户端,只要有代理,想开多少开多少。

Archlinx主力机配置记录

🎣

硬件环境

  • CPU:AMD5900X
  • 主板:华擎x570太极雷蛇
  • 显卡:3060Ti 8G
  • 台式机!!!

一、archlinx系统安装

视频参考:https://www.bilibili.com/video/BV1J34y1f74E/

1.1 archlinux USB引导安装

把arch镜像写入U盘就行

1.2 设置U盘启动,进入live环境

F2 bro
  • 根据主板进入bios(一般是F2或者F12),禁用安全启动,并选择U盘启动

启动后出现引导加载程序菜单,选择Arch Linux install medium 确认就行

远程桌面控制

一、nomachine介绍

这是一个内网的远程桌面控制软件,使用专有的nx协议连接,会根据网络速度和容量动态调整压缩和带宽,支持win、linux、mac、android、ios。实测使用丝般流畅(得看你的服务器带宽,3M带宽下比向日葵好)。

在内网中使用需要控制与被控端都安装nomachine,启动后会自动扫描并展示可用的nomachine服务。

它的nx协议走的是4000端口,只需对外暴露本地的4000端口就能通过网络连接远程访问!

被控端显示设置

被控端在使用nomachine时不能关闭显示器,可以设置无头(Headless)显示,或者淘宝直接买给假负载给电脑插上。

软路由记录

芯片:N5105

网口识别

dmesg | grep -i eth

物理接口符号 pve识别网口号 物理网口 软路由网口
eth0 enp2s0 02:00.0 eth0(桥接)
eth1 enp3s0 03:00.0 eth3(wan)
eth2 enp4s0 04:00.0 eth2(lan)
eth3 enp5s0 05:00.0 eth1(lan)

抽风的Git

一、现象

代码提交时出现ssh: connect to host ssh.github.com port 443: Connection refused错误

二、解决

1.换回22端口-无用

~/.ssh/config文件中的

Host github.com
Hostname ssh.github.com
PreferredAuthentications pulickey
IdentityFile ~/.ssh/id_rsa
Port 443
去掉

2.指定使用https仓库-无用

vim shafishcn/.git/config,将url = git@github.com:shafishcn/shafish_blog.git改成url = https://github.com/shafishcn/shafish_blog.git

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

很久之前写的,刚好最近又用到 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测试咧。