五一假期到了,各省高速实时监控汇总
以下部分需要在微信中打开 【河南】https://weixin.hngscloud.com 【公众号】河南高速 【浙江】监控视频 (zjt.gov.cn) :公众号:浙里畅行 【四川】https://etc.scjtonline.cn...
以下部分需要在微信中打开 【河南】https://weixin.hngscloud.com 【公众号】河南高速 【浙江】监控视频 (zjt.gov.cn) :公众号:浙里畅行 【四川】https://etc.scjtonline.cn...
无法提供摘要。这是一篇受保护的文章。
无法提供摘要。这是一篇受保护的文章。
在上节课中,我们学习了 if 判断,如果布尔表达式成立,就执行后面的代码块。 假设,if 判断后面的布尔表达式不成立,我们想要执行另外的代码块,这该怎么办呢? 在图例中,我们使用了两个 if,来保证对比情况都会有对应的输出。 为了更便捷地写...
在上节课中,我们学习了布尔表达式中的布尔数、比较运算和逻辑运算。 如图所示,布尔表达式表示了两类结果, True 还是 False。 相信你肯定有这样的疑问,这些布尔表达式有什么作用呢?其实,主要的用处是在判断语句中。 判断在计算机世界里无...
前三天,我们学了字符串、整型、浮点型这三种数据类型。今天我们将学习最后一种数据类型:布尔型。 Tony支付宝余额是1000块钱,那么“Tony支付宝余额是1000块钱”这个描述就是真的;而“Tony支付宝余额有2000块钱”这个描述就是假的...
在昨天的课程中,我们学习了字符串和变量。今天为大家讲解新的知识点——Python中的数字,是如何处理的。 Python中,字符串用来表示文本,用什么表示数字呢? 整型就是整数的数据类型,用来表示整数的。 整数在Python的世界中,和数学中...
本课目标 在昨天的课程中,我们打开了编程世界的魔法盒,今天我们继续在 Python 世界里遨游,学习字符串是如何存储和输出的。 字符串,顾名思义,就是一个个字符的组合,字符可以是一个数字、一个字母、一个文字,甚至是一个符号。 它的特点非常鲜...
首先,让我们思考一个问题,编程是什么? 编程是人类与电脑沟通的过程,可以告诉电脑做什么以及怎么做。人类用编程构建数字世界,比如网站、App、办公软件等等。 世界上有很多种编程语言,Python 具有其简洁优雅的语言特性以及强大的功能。 Py...
CSS3 中的@font-face提供了自定义字体的功能,可以使网页不局限于用户系统中的字体。 然而理想很丰满,现实很骨感。 像英文这类的语言来说,字体文件包含非常少的字符,所以一个字体文件会非常的小。 我随便下载了几份英文字体 英文字体大...
baiduboxapp/13.10.0.10
。有些实现会要求在 Headers 中添加 X-T5-Auth
,但经过测试,这个 key 其实是不必要的。
import requests
def send_request_via_proxy(*args, **kwargs):
baidu_proxy = 'cloudnproxy.baidu.com:443'
kwargs['proxies'] = {'http': baidu_proxy, 'https': baidu_proxy}
if 'headers' not in kwargs:
kwargs['headers'] = {}
if 'User-Agent' not in kwargs['headers']:
kwargs['headers']['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ' \
'(KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
kwargs['headers']['User-Agent'] += ' baiduboxapp/13.10.0.10'
# kwargs['headers']['X-T5-Auth'] = '196289709'
resp = requests.request(*args, **kwargs)
return resp
if __name__ == '__main__':
api = 'https://pubstatic.b0.upaiyun.com/?_upnode'
ip_info = send_request_via_proxy('GET', api).json()
print(ip_info['remote_addr'])
print(ip_info['remote_addr_location'])
$ python3 proxy-test.py
180.101.81.32
{'country': '中国', 'isp': '电信', 'province': '江苏', 'continent': '亚洲', 'city': '苏州'}
220.181.7.1 中国北京电信
220.181.33.174 中国北京电信
220.181.111.189 中国北京电信
180.97.93.202 中国江苏苏州 电信
180.97.104.168 中国江苏南京 电信
14.215.179.244 中国广东广州 电信
157.0.148.53 中国江苏苏州 联通
153.3.236.22 中国江苏南京 联通
110.242.70.69 中国河北保定 联通
110.242.70.68 中国河北保定 联通
157.255.78.51 中国广东广州 联通
36.152.45.98 中国江苏南京 移动
36.152.45.97 中国江苏南京 移动
@msn.com
的邮箱地址。但时至今日,你依旧可以通过某些方法注册到 @msn.com
的邮箱地址。这里介绍一下我是如何注册的。
@outlook.com
):这个很简单获得,直接在微软官网注册一个,国家选择美国即可;@msn.com
。为了方便注册,你可以提前在 https://office.com 测试下你想要的邮箱地址是否可用,如果显示邮箱不存在,那么就可以注册,如果直接跳转到输入密码的页面,那么说明邮箱已经被注册了,需要你更换一个用户名。
补充完 First Name 等信息之后,点击 Next 完成注册,这里请妥善保存输入的密码以及安全问题和答案,以防忘记密码时无法找回。
@msn.com
邮件地址依旧会保留,你可以继续免费使用它。
pdns-server
,然后再安装 pdns-backend-$backend
。Backend 是你可以自己选的,常用的有 BIND
和 Generic MySQL
,需要 GEODNS 可以用 GEOIP
,所有列表见此。如果想做网页版控制后台,使用 MySQL 的可能比较方便。如果只是通过文件形式控制,那么 BIND 和 GEOIP 都可以。 我使用 GEOIP 版本的,GEOIP 版本可拓展性强,使用 YAML 文件,更灵活、优雅,本文就讲讲 GEOIP 版本: 在 Ubuntu 上安装(系统软件源里就有):
$ sudo apt install pdns-server
$ sudo apt install pdns-backend-geoip
然后修改配置文件:
$ rm /etc/powerdns/pdns.d/* # 删除 Example
重要更新⚠️:2018 年 4 月 1 日起已经无法通过软件自动下载到 DAT 格式的 GeoIP 数据库,请前往官网手动下载对应数据库。需要的是 Binary 格式的。创建文件
/etc/GeoIP.conf
内容是:
# The following UserId and LicenseKey are required placeholders:
UserId 999999
LicenseKey 000000000000
# Include one or more of the following ProductIds:
# * GeoLite2-City - GeoLite 2 City
# * GeoLite2-Country - GeoLite2 Country
# * GeoLite-Legacy-IPv6-City - GeoLite Legacy IPv6 City
# * GeoLite-Legacy-IPv6-Country - GeoLite Legacy IPv6 Country
# * 506 - GeoLite Legacy Country
# * 517 - GeoLite Legacy ASN
# * 533 - GeoLite Legacy City
ProductIds 506 GeoLite-Legacy-IPv6-Country
DatabaseDirectory /usr/share/GeoIP
然后安装 geoipupdate,执行 sudo apt install geoipupdate && mkdir -p /usr/share/GeoIP && geoipupdate -v
,你的数据库就已经下载完毕了。
/etc/powerdns/pdns.d/geoip.conf
内容是:
launch=geoip
geoip-database-files=/usr/share/GeoIP/GeoLiteCountry.dat /usr/share/GeoIP/GeoIPv6.dat # 选择 IPv4 和 IPv6 国家模块
geoip-database-cache=memory
geoip-zones-file=/share/zone.yaml # 你的 YAML 配置文件的位置,随便哪个地方都行
geoip-dnssec-keydir=/etc/powerdns/key
创建那个 YAML 文件,然后开始写 Zone,这是一个例子(IPv6 不是必须的,所有 IP 应该都填写外部 IP,本文以精确到国家举例,并列内容的顺序无所谓):
# @see: https://doc.powerdns.com/md/authoritative/backend-geoip/
domains:
- domain: example.com
ttl: 300 # 默认 TTL 时长
records:
##### Default NS
ns1.example.com:
- a: # 你的服务器的第一个 IPv4 地址
content: 10.0.0.1
ttl: 86400
- aaaa: # 你的服务器的第一个 IPv6 地址
content: ::1
ttl: 86400
ns2.example.com: # 你的服务器的第二个 IPv4 地址(如果没有就和上面一样)
- a:
content: 10.0.0.2
ttl: 86400
- aaaa: # 你的服务器的第二个 IPv6 地址(如果没有就和上面一样)
content: ::2
ttl: 86400
##### Root domain
example.com: # 根域名下的记录
- soa:
content: ns1.example.com. admin.example.com. 1 86400 3600 604800 10800
ttl: 7200
- ns:
content: ns1.example.com.
ttl: 86400
- ns:
content: ns2.example.com.
ttl: 86400
- mx:
content: 100 mx1.example.com. # 权重 [空格] 主机名
ttl: 7200
- mx:
content: 100 mx2.example.com.
ttl: 7200
- mx:
content: 100 mx3.example.com.
ttl: 7200
- a: 103.41.133.70 # 如果想使用默认 TTL,那就不用区分 content 和 ttl 字段
- aaaa: 2001:470:fa6b::1
##### Servers list 你的服务器列表
beijing-server.example.com: &beijing
- a: 10.0.1.1
- aaaa: ::1:1
newyork-server.example.com: &newyork
- a: 10.0.2.1
- aaaa: ::2:1
japan-server.example.com: &japan
- a: 10.0.3.1
- aaaa: ::3:1
london-server.example.com: &uk
- a: 10.0.4.1
- aaaa: ::4:1
france-server.example.com: &france
- a: 10.0.5.1
- aaaa: ::5:1
##### GEODNS 分区解析
# @see: https://php.net/manual/en/function.geoip-continent-code-by-name.php
# @see: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
# unknown also is default
# %co.%cn.geo.example.com
# 默认
unknown.unknown.geo.example.com: *newyork # 默认解析到美国
# 洲
unknown.as.geo.example.com: *japan # 亚洲解析到日本
unknown.oc.geo.example.com: *japan # 大洋洲解析到日本
unknown.eu.geo.example.com: *france # 欧洲解析到法国
unknown.af.geo.example.com: *france # 非洲解析到法国
# 国家
chn.as.geo.example.com: *beijing # 中国解析北京
gbr.eu.geo.example.com: *uk # 英国解析到英国
services:
# GEODNS
www.example.com: [ '%co.%cn.geo.example.com', 'unknown.%cn.geo.example.com', 'unknown.unknown.geo.example.com']
这个配置,就相当于把 www.example.com 给分区解析,由于目前这个解析存在一些问题,导致不能同时在根域名和子域名下设置 GEODNS,这个 Bug 我已经提交反馈了。 如果你想只把解析精度设在洲级别,那么就直接 %cn.geo.example.com 这样少写一级就行了。如果你需要精确到城市,那么多写一级就行,但是需要在配置文件中添加 GeoIP 城市的数据库。然而免费的城市数据库的城市版本并不精准,你还需要去购买商业数据库,这又是一个额外开销。
$ dig icann.org ns +short
a.iana-servers.net.
b.iana-servers.net.
c.iana-servers.net.
ns.icann.org.
然后再看它的上级域名 org:
$ dig org ns +short
a2.org.afilias-nst.info.
b0.org.afilias-nst.org.
d0.org.afilias-nst.org.
c0.org.afilias-nst.info.
a0.org.afilias-nst.info.
b2.org.afilias-nst.org.
随便找一个服务器,查询权威记录(我就不用 +short 了):
$ dig @a0.org.afilias-nst.info icann.org ns
;; QUESTION SECTION:
;icann.org.INNS
;; AUTHORITY SECTION:
icann.org.86400INNSc.iana-servers.net.
icann.org.86400INNSa.iana-servers.net.
icann.org.86400INNSns.icann.org.
icann.org.86400INNSb.iana-servers.net.
;; ADDITIONAL SECTION:
ns.icann.org.86400INA199.4.138.53
ns.icann.org.86400INAAAA2001:500:89::53
可以看到,在这个 org 的 NS 服务器就已经把 ns.icann.org. 的记录返回来了,这也就是你需要在域名注册商填写 IP 地址的原因。然而你最好在你域名下的 DNS 服务器上也返回相同的 NS 和相同的 IP。 最后,不要忘了改域名的 NS 记录。
&variable
设置变量,*variable
使用变量,这很像 CloudXNS 下的 LINK 记录,比如在 CloudXNS 下你可以这么写:
www.example.com 600 IN A 10.0.0.1
www.example.com 600 IN A 10.0.0.2
www.example.com 600 IN AAAA ::1
www.example.com 600 IN AAAA ::2
sub.example.com 600 IN LINK www.example.com
然后在你的 YAML 记录里就可以这么写:
www.example.com: &www
- a: 10.0.0.1
- a: 10.0.0.2
- aaaa: ::1
- aaaa: ::2
sub.example.com: *www
这就是 YAML 的一种高级写法,不需要其他额外支持。
$ mkdir /etc/powerdns/key
$ pdnsutil secure-zone example.com
$ pdnsutil show-zone example.com
最后一个指令所返回的结果就是你需要在域名注册商设置的记录,不推荐都设置,只设置 ECDSAP256SHA256 - SHA256 digest 就行了。 最后在线检查设置即可 测试地址1 测试地址2,可能有几天缓存时间。 我的检查结果
"*.ip.example.com":
- txt:
content: "IP%af: %ip, Continent: %cn, Country: %co, ASn: %as, Region: %re, Organisation: %na, City: %ci"
ttl: 0
这些变量都能作为你 GEODNS 的标准,也可以检查你的 GEOIP 数据库情况。 然后,正确检查的姿势:
$ random=`head -200 /dev/urandom md5` ; dig ${random}.ip.example txt +short
"IPv4: 42.83.200.23, Continent: as, Country: chn, ASn: unknown, Region: unknown, Organisation: unknown, City: unknown"
IP 地址就是 DNS 缓存服务器地址(如果你开启了 EDNS Client Subnet,且缓存服务器支持,那么就是自己的 IP,但是如果使用 8.8.8.8,那么会看到自己的 IP 最后一位是 0),如果你在本地指定了从你自己的服务器查,那就直接返回你自己的 IP 地址。由于我只安装了国家数据库,所以除了洲和国家之外其余都是 Unknown。
$ dig @a.gtld-servers.net guozeyu.com
;; QUESTION SECTION:
;guozeyu.com.INA
;; AUTHORITY SECTION:
guozeyu.com.172800INNSa.geo.ns.tloxygen.net.
guozeyu.com.172800INNSc.geo.ns.tloxygen.net.
;; ADDITIONAL SECTION:
a.geo.ns.tloxygen.net.172800INA198.251.90.65
a.geo.ns.tloxygen.net.172800INAAAA2605:6400:10:6a9::2
c.geo.ns.tloxygen.net.172800INA104.196.241.116
c.geo.ns.tloxygen.net.172800INAAAA2605:6400:20:b5e::2
其中是两个 IPv4 两个 IPv6,其中 a.geo.ns.tloxygen.net. 是使用了 Anycast 技术的 IP 地址,其背后由三台服务器提供。c.geo.ns.tloxygen.net. 属于另一家服务商的主机,这样一个挂了之后还有备份,更加稳定。
来自:https://www.guozeyu.com/2016/08/self-host-dns/
curl https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh | bash
wget --no-check-certificate -O memoryCheck.sh https://raw.githubusercontent.com/uselibrary/memoryCheck/main/memoryCheck.sh && chmod +x memoryCheck.sh && bash memoryCheck.sh
来源:
内存交换(Swap)
当系统内存不够用时,宿主机把部分长时间未操作(读写)的内存交换到磁盘上配置的Swap分区,等相关程序需要运行时再恢复到内存中。
气球驱动(Balloon)
通过virtio_balloon驱动实现动态调整Guest与Host的可用内存空间。Balloon的工作原理是在虚拟机中安装一个kmod,KVM宿主机内存不足,会根据virtio_balloon判断哪些内存页面可以被回收,然后virtio_balloon将这些内存占用,返回给宿主机使用。
root用户执行rmmod virtio_balloon可以关闭virtio_balloon。事实上,大多数使用Proxmox VE的厂商都会开启virtio_balloon进行超售。
KSM(Kernel Samepage Merging 内存合并)
KSM是一种内存合并技术,它可以在KVM中实现内存共享,从而节省内存空间。是Linux kernel的一种内存共享机制,在2.6.32版本引入,用于合并具有相同内容的物理主存页面以减少页面冗余。在Kernel中KSM会定期扫描用户注册的内存区域,当有相同的页面就会将其合并,并用一个添加到页表中的新页面来代替原来的页面。当需要修改时,复制新的内存页,再做修改(将其标记为 copy-on-write)
https://github.com/uselibrary/memoryCheck
https://www.nodeseek.com/post-8417-1
结论:
root用户执行rmmod virtio_balloon
rmmod virtio_balloon
可以关闭virtio_balloon,在超售太猛的机器上真的有效,性能提升很大。
SWAP超售!
内存io速度低于 10 GB/s,存在SWAP超售可能