vault backup: 2026-11-07 16:33:44
@@ -0,0 +1,2 @@
|
||||
[](Blender+0560dc90-cc65-4972-b4da-5b2ae1fc958d/%20f66f897e-bcf9-4272-95f7-abf7ca91eeb7.md)
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
|
||||
```Plain Text
|
||||
docker run -i --name certbot --rm -v $'C:\\Users\\Cheney\\AppData\\Local\\cloudmaster\\certs':/etc/letsencrypt -v $'C:\\Users\\Cheney\\AppData\\Local\\cloudmaster\\certs\\config\\sunedu':/config registry.cn-hangzhou.aliyuncs.com/fullstack/certbot $'certbot certonly --preferred-challenges=dns -m robot@fullstack.club --agree-tos --no-bootstrap --expand --renew-with-new-domains --force-renewal -a certbot-dns-aliyun:dns-aliyun --certbot-dns-aliyun:dns-aliyun-credentials /config/credentials.ini -d *.sunedu.com -d *.dev.sunedu.com -d *.sdk.sunedu.com -d *.kids.sunedu.com'
|
||||
```
|
||||
|
||||
|
||||
|
||||
```Plain Text
|
||||
certbot certonly --preferred-challenges=dns -m robot@fullstack.club --agree-tos \
|
||||
-a certbot-dns-aliyun:dns-aliyun \
|
||||
--certbot-dns-aliyun:dns-aliyun-credentials /config/credentials.ini \
|
||||
-d fullstack.club \
|
||||
-d *.dev.h2o.fullstack.club \
|
||||
-d *.h2o.fullstack.club \
|
||||
-d *.cloud.fullstack.club \
|
||||
-d *.dev.fullstack.club \
|
||||
-d *.fullstack.club \
|
||||
-d *.sunedu.fullstack.club \
|
||||
-d *.sunyard.fullstack.club
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```Plain Text
|
||||
$ docker run -i --name certbot --rm -v C:\\Users\\Cheney\\AppData\\Local\\cloudmaster\\certs:/etc/letsencrypt -v C:\\Users\\Cheney\\AppData\\Local\\cloudmaster\\certs\\config\\gpio:/config registry.cn-hangzhou.aliyuncs.com/fullstack/certbot certbot certonly --preferred-challenges=dns -m robot@fullstack.club --agree-tos --no-bootstrap --expand --renew-with-new-domains --force-renewal -a certbot-dns-aliyun:dns-aliyun --certbot-dns-aliyun:dns-aliyun-credentials /config/credentials.ini -d gpio.me -d *.gpio.me
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```Plain Text
|
||||
docker run -it --name certbot --rm -v C:\\Users\\Cheney\\AppData\\Local\\cloudmaster\\certs:/etc/letsencrypt -v C:\\Users\\Cheney\\AppData\\Local\\cloudmaster\\certs\\config\\fullstack:/config registry.cn-hangzhou.aliyuncs.com/fullstack/certbot certbot certonly --preferred-challenges=dns -m robot@fullstack.club --agree-tos --no-bootstrap --expand --renew-with-new-domains --force-renewal -a certbot-dns-aliyun:dns-aliyun --certbot-dns-aliyun:dns-aliyun-credentials /config/credentials.ini -d fullstack.club -d *.fullstack.club -d *.h2o.fullstack.club -d *.dev.fullstack.club -d *.cloud.fullstack.club -d *.sunedu.fullstack.club -d *.sunyard.fullstack.club -d *.dev.h2o.fullstack.club -d *.test.h2o.fullstack.club
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
|
||||
|
||||
|
||||
[启动失败](Docker+ff521232-c74a-47cb-aa9c-793737bf5869/%E5%90%AF%E5%8A%A8%E5%A4%B1%E8%B4%A5%20612f7d9a-088d-4fdd-8dbe-a781b1b751a0.md)
|
||||
|
||||
[与 firewalld 冲突](Docker+ff521232-c74a-47cb-aa9c-793737bf5869/%E4%B8%8E+firewalld+%E5%86%B2%E7%AA%81%20e231f857-d5ff-4928-8ff6-3722b587b220.md)
|
||||
|
||||
[Ubuntu上安装Docker](Docker+ff521232-c74a-47cb-aa9c-793737bf5869/Ubuntu%E4%B8%8A%E5%AE%89%E8%A3%85Docker%2071ba5c28-1ccd-42ec-b7d8-055497d25b0d.md)
|
||||
|
||||
[docker 源](Docker+ff521232-c74a-47cb-aa9c-793737bf5869/docker+%E6%BA%90%2002ddedf8-112a-4b4e-9d3f-a7594ad81a65.md)
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
[Nginx](Gateway+2410436b-ea39-4602-8190-80e6cfae9410/Nginx%20bc5e78d5-1af7-40b0-bca2-1acb9821d533.md)
|
||||
|
||||
[GmSSL Linux编译, 环境搭建](Gateway+2410436b-ea39-4602-8190-80e6cfae9410/GmSSL+Linux%E7%BC%96%E8%AF%91,+%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA%20ee56e61e-9026-42a1-b044-463de507a77e.md)
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
## 编译环境:
|
||||
|
||||
- wsl ubuntu 20.04
|
||||
|
||||
[GmSSL Project
|
||||
](http://gmssl.org/)[算法相关原理文档](https://github.com/PopezLotado/SM2Java/tree/master/src/main/resources)
|
||||
|
||||
由于GmSSL继承自openssl, 为了防止和openssl冲突,最好将GmsSL 编译为静态库 [在Linux下安装GmSSL](https://blog.csdn.net/zyhse/article/details/112350363)
|
||||
|
||||
1、 执行 `./config --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl no-shared` 将其安装到/usr/local/gmssl.
|
||||
|
||||
> 注:–prefix表示安装路径;no-shared 表示只编译静态库;默认生成64位库。
|
||||
|
||||
执行后报错信息:
|
||||
|
||||
```VHDL
|
||||
Operating system: x86_64-whatever-linux2
|
||||
"glob" is not exported by the File::Glob module
|
||||
Can't continue after import errors at ./Configure line 18.
|
||||
BEGIN failed--compilation aborted at ./Configure line 18.
|
||||
"glob" is not exported by the File::Glob module
|
||||
Can't continue after import errors at ./Configure line 18.
|
||||
BEGIN failed--compilation aborted at ./Configure line 18.
|
||||
This system (linux-x86_64) is not supported. See file INSTALL for details
|
||||
```
|
||||
|
||||
这是由于Perl package导致,修改Configure文件. [参考链接](https://github.com/guanzhi/GmSSL/issues/811)
|
||||
|
||||
`use if $^O ne "VMS", 'File::Glob' => qw/glob/;`
|
||||
|
||||
修改为
|
||||
|
||||
`use if $^O ne "VMS", 'File::Glob' => qw/:glob/;`
|
||||
|
||||
2、 再次执行报错
|
||||
|
||||
```VHDL
|
||||
Something wrong with this line:
|
||||
Program fragment delivered error ``"glob" is not exported by the File::Glob module
|
||||
at /mnt/e/secure/GmSSL-master/test/build.info at ./Configure line 1644.
|
||||
```
|
||||
|
||||
原因同上,修改 test/build.info中, 查找File::Glob. 修改后即可生成makefile
|
||||
|
||||
3、执行 `make -j8`
|
||||
报错信息:
|
||||
|
||||
```Plain Text
|
||||
make depend && make _tests
|
||||
make[1]: Entering directory '/mnt/e/secure/GmSSL-master'
|
||||
make[1]: Leaving directory '/mnt/e/secure/GmSSL-master'
|
||||
make[1]: Entering directory '/mnt/e/secure/GmSSL-master'
|
||||
( cd test; \
|
||||
SRCTOP=../. \
|
||||
BLDTOP=../. \
|
||||
PERL="/usr/bin/perl" \
|
||||
EXE_EXT= \
|
||||
OPENSSL_ENGINES=.././engines \
|
||||
OPENSSL_DEBUG_MEMORY=on \
|
||||
/usr/bin/perl .././test/run_tests.pl )
|
||||
"glob" is not exported by the File::Glob module
|
||||
Can't continue after import errors at .././test/run_tests.pl line 19.
|
||||
BEGIN failed--compilation aborted at .././test/run_tests.pl line 19.
|
||||
make[1]: *** [Makefile:153: _tests] Error 255
|
||||
make[1]: Leaving directory '/mnt/e/secure/GmSSL-master'
|
||||
make: *** [Makefile:150: tests] Error 2
|
||||
```
|
||||
|
||||
按以上方法修改run_tests.pl即可。
|
||||
|
||||
4、执行`sudo make install` 安装
|
||||
|
||||

|
||||
|
||||
参考:
|
||||
[GmSSL快速上手指南
|
||||
](https://www.cnblogs.com/wonz/p/14117225.html)[重新安装openssl](https://www.jianshu.com/p/25126152ad27)
|
||||
|
||||
标签: [Linux](https://www.cnblogs.com/freedreamnight/tag/Linux/)
|
||||
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
@@ -0,0 +1,4 @@
|
||||
|
||||
|
||||
[编译国密 Nginx](Nginx+bc5e78d5-1af7-40b0-bca2-1acb9821d533/%E7%BC%96%E8%AF%91%E5%9B%BD%E5%AF%86+Nginx%2077c5153b-77b0-4001-9b42-2c3aef51acc7.md)
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
需要先安装 git 依赖:`yum install git` 或者 `apt install git`
|
||||
|
||||
```Plain Text
|
||||
# wget https://github.com/GmSSL/GmSSL/archive/refs/heads/master.zip
|
||||
# unzip master.zip
|
||||
# cd GmSSL-master
|
||||
|
||||
# clone 开源仓库
|
||||
git clone https://github.com/GmSSL/GmSSL.git
|
||||
cd GmSSL
|
||||
|
||||
# 编译 Gmssl
|
||||
./config --prefix=/usr/local/gmssl
|
||||
make
|
||||
sudo make install
|
||||
|
||||
# 下载 Nginx
|
||||
wget http://nginx.org/download/nginx-1.21.0.tar.gz
|
||||
tar -zxf nginx-1.21.0.tar.gz
|
||||
cd nginx-1.21.0
|
||||
# 将 auto/lib/openssl/conf 中的全部$ OPENSSL/.openssl/ 修改为 $OPENSSL/ 并保存
|
||||
sed -i "s/$OPENSSL\/\.openssl\//$OPENSSL\//g" auto/lib/openssl/conf
|
||||
|
||||
# 配置
|
||||
|
||||
# 安装环境
|
||||
# yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
|
||||
|
||||
# 其他编译项自行配置
|
||||
./configure \
|
||||
--prefix=/usr/local/nginx \
|
||||
--with-http_ssl_module \
|
||||
--with-http_stub_status_module \
|
||||
--with-http_realip_module \
|
||||
--with-threads \
|
||||
--with-openssl="/usr/local/gmssl" \
|
||||
--with-cc-opt="-I/usr/local/gmssl/include" \
|
||||
--with-ld-opt="-lm"
|
||||
|
||||
# 编译安装
|
||||
make install
|
||||
|
||||
# 测试
|
||||
/usr/local/nginx/sbin/nginx -t
|
||||
```
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
第一步, 生成配置文件
|
||||
|
||||
```Plain Text
|
||||
java -agentlib:native-image-agent=config-merge-dir=./native-image -jar %name%
|
||||
```
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
第二步,编译
|
||||
|
||||
```Plain Text
|
||||
native-image -H:ConfigurationFileDirectories=./native-image -jar ./target/%name% -H:+AllowIncompleteClasspath --no-fallback --report-unsupported-elements-at-runtime
|
||||
```
|
||||
|
||||
|
||||
|
||||
[参数](GraalVM+0bef99f7-233b-4ec2-868b-db6b3e6d4fb9/%E5%8F%82%E6%95%B0%2068d6cef2-39f1-4758-b8ad-cf375218c11a.md)
|
||||
|
||||
[docker graalvm](GraalVM+0bef99f7-233b-4ec2-868b-db6b3e6d4fb9/docker+graalvm%20a7ddf18b-405f-4e42-b161-c406da6870e1.md)
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
docker pull darkaru/graalvm:v2
|
||||
|
||||
|
||||
|
||||
docker pull zapp88/graalvm-multiarch:java17-latest
|
||||
|
||||
|
||||
|
||||
docker run -it --rm -v /tmp:/tmp zapp88/graalvm-multiarch:java17-latest bash
|
||||
|
||||
|
||||
|
||||
native-image -jar SM9-1.0-SNAPSHOT.jar
|
||||
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,58 @@
|
||||
- `--allow-incomplete-classpath`允许使用不完整的类路径构建映像,并在首次访问它们时(而不是在构建映像时)在运行时报告类型解析错误。
|
||||
|
||||
- `--report-unsupported-elements-at-runtime` 报告不支持的方法和字段在第一次访问时在运行时的使用情况,而不是在映像构建期间显示为错误。
|
||||
|
||||
- `--no-fallback` 强制仅本机映像运行时,并在常规JVM上禁用回退。
|
||||
|
||||
- `--no-server` 表示不要使用有时可能不可靠的映像构建服务器,有关更多详细信息,请参见 graal#1952。
|
||||
|
||||
- `--install-exit-handlers`允许对来自Docker的关闭请求做出反应。
|
||||
|
||||
- `-H:+InlineBeforeAnalysis` 启用分析之前的内联,以便允许实用程序方法返回常量,例如考虑删除代码。
|
||||
|
||||
- `--verbose` 打印更详细的构建过程
|
||||
|
||||
- `-H:+ReportExceptionStackTraces` 出错的时候提供更多细节。
|
||||
|
||||
- `--initialize-at-build-time` 默认情况下在构建时初始化类,而未指定任何类或程序包。基于Netty的应用程序当前(希望是暂时)需要此选项,但其他应用程序不建议使用此选项,因为它会触发兼容性问题,尤其是有关日志记录和静态字段的问题。有关更多详细信息,请参见 this issue。如果需要,可以将其与特定的类或指定的包一起使用。
|
||||
|
||||
- `-H:+PrintAnalysisCallTree` 有助于查找使用了哪些类,方法和字段以及原因。您可以在 reports documentation 中找到更多详细信息。
|
||||
|
||||
- `-H:ReportAnalysisForbiddenType=com.example.Foo` 帮助查找指定的类为什么打包到了镜像中。
|
||||
|
||||
- `--trace-class-initialization` 提供以逗号分隔的完整类名称的列表,跟踪其如何初始化的。
|
||||
|
||||
- `--trace-object-instantiation` 提供以逗号分隔的完整类名称的列表,跟踪对象如何实例化。
|
||||
|
||||
- `--enable-all-security-services` 加密和某些安全服务必需的(默认情况下,应在需要时由 Spring Native 通过 Native hints 启用)。
|
||||
|
||||
- `--enable-https` 启用HTTPS支持(比如使用 `WebClient` 或 `RestTemplate` 时通常需要)。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 访问过滤器文件
|
||||
|
||||
一个简单的 `access-filter.json` 文件。
|
||||
|
||||
```Plain Text
|
||||
{ "rules": [
|
||||
{"excludeClasses": "org.apache.maven.surefire.**"},
|
||||
{"excludeClasses": "net.bytebuddy.**"},
|
||||
{"excludeClasses": "org.apiguardian.**"},
|
||||
{"excludeClasses": "org.junit.**"},
|
||||
{"excludeClasses": "org.mockito.**"},
|
||||
{"excludeClasses": "org.springframework.test.**"},
|
||||
{"excludeClasses": "org.springframework.boot.test.**"},
|
||||
{"excludeClasses": "com.example.demo.test.**"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
|
||||
[QA](JoinQuant+a465e164-f909-4908-a0bc-c07761e76421/QA%2089ef17ba-1cd8-4c21-82c7-e35a5d6f5c91.md)
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
- 如何打标记
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
[LR编写Socket脚本方法1(XML/16进制报文data.ws格式)](LoadRunner+f8e6e448-d76e-4625-b4a4-cb59434d0a0e/LR%E7%BC%96%E5%86%99Socket%E8%84%9A%E6%9C%AC%E6%96%B9%E6%B3%951+XML+16%E8%BF%9B%E5%88%B6%E6%8A%A5%E6%96%87data.ws%E6%A0%BC%E5%BC%8F+%2045281cff-7505-4398-b768-f58b3b9d4cfa.md)
|
||||
|
||||
[LR编写Socket脚本方法2(从文件读取报文)](LoadRunner+f8e6e448-d76e-4625-b4a4-cb59434d0a0e/LR%E7%BC%96%E5%86%99Socket%E8%84%9A%E6%9C%AC%E6%96%B9%E6%B3%952+%E4%BB%8E%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%8A%A5%E6%96%87+%2094c7488d-ce8e-4b7b-9d96-ea18b3e438b0.md)
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
本文主要讲述了Socket协议脚本的基础知识和编写方法,让大家能够在短时间内快速掌握简单的Socket协议脚本的编写方法。
|
||||
|
||||
|
||||
**1.socket协议介绍**
|
||||
Socket协议有万能协议之称,很多系统底层都是用的socket协议,用处十分广泛。
|
||||
|
||||
|
||||
**1.1 Socket通讯方式说明**
|
||||
与socket通讯有两种方式,一种是建立长连接,建立后不停的发送,接收;另一种是建立短连接,即建立连接发送报文,接收报文关闭连接
|
||||
|
||||
|
||||
**1.2 Socket协议发送的buf类型介绍**
|
||||
Send buffer类型分为字符串和xml类型
|
||||
|
||||
|
||||
**1.3 Socket协议脚本编写前提:**
|
||||
与项目组沟通,确认是否是socket协议,由项目组提供服务器IP和端口号还有socket协议交易的报文发送及接收报文对,及交易接口文档,了解清楚报文的数据长度,参数化字段,结构,代表什么等,了解清楚后进行socket协议脚本的开发。
|
||||
|
||||
|
||||
|
||||
**1.4、Socket协议脚本函数说明及实例:**
|
||||
|
||||
1)名称 lrs_create_socket();
|
||||
|
||||
创建socket连接,添加IP和端口号,如果创建成功返回值为0,反之则返回为非0数值。(对于长连接,建立socket连接放在vuser_init函数中,短连接放在Action中即可) 实例: lrs_create_socket("socket0","TCP","RemoteHost=180.170.150.230:7700", LrsLastArg);
|
||||
|
||||
|
||||
|
||||
2)名称 lrs_send();
|
||||
|
||||
发送socket请求消息,取缓冲区buf0的报文并发送。
|
||||
|
||||
实例: lrs_send("socket0","buf1",LrsLastArg);
|
||||
|
||||
3)名称 lrs_receive();
|
||||
|
||||
接收socket的响应报文,放置buf1中。
|
||||
|
||||
实例:lrs_receive("socket0","buf2",LrsLastArg);
|
||||
|
||||
4)名称 lrs_get_last_received_buffer();
|
||||
|
||||
获取最后收到的buffer和大小,其中将最后收到的buffer的值赋给RecvBuf变量,将大小赋值给RecvLen。
|
||||
|
||||
实例: lrs_get_last_received_buffer("socket0",&recvBuf,&recvLen);
|
||||
|
||||
5)名称 lrs_free_buffer();
|
||||
|
||||
为防止内存泄露,释放内存空间。
|
||||
|
||||
实例: lrs_free_buffer(recvBuf);
|
||||
|
||||
6)名称 lrs_close_socket();
|
||||
|
||||
关闭Socket连接,(对于长连接,关闭socket连接应放在vuser_end函数中)
|
||||
|
||||
实例: lrs_close_socket("socket0");
|
||||
|
||||
其他常用的Socket函数:
|
||||
|
||||
lrs_set_send_buffer("socket0", sSendPkg, iLenOfPkg );//指定要发送的socket信息
|
||||
lrs_get_buffer_by_name("buf0", sSendPkg, iLenOfPkg);// 获取收到的buffer和大小
|
||||
lrs_length_send("socket0","buf0",1,"Size=4","Encoding=1",LrsLastArg);
|
||||
关联函数:
|
||||
lrs_save_param_ex("socket0","received","",151,7,"ascii","response");//取指定位置字符串保存到变量,以便判断事务是否成功
|
||||
lrs_save_searched_string();//在指定位置搜索字符串,将出现的字符串报错到参数中
|
||||
超时函数
|
||||
|
||||
lrs_receive_ex(“socket0“, “buf1”, "NumberOfBytesToRecv=300", LrsLastArg);//指定接收报文长度
|
||||
|
||||
lrs_set_connect_timeout();//设置连接超时时间
|
||||
lrs_set_recv_timeout();//设置服务器响应超时时间
|
||||
lrs_set_recv_timeout2();//设置接收超时时间,使系统不去检查回收的内容是否一致
|
||||
|
||||
**2、Socket脚本编写**
|
||||
|
||||
**2.1 简单划分步骤**
|
||||
|
||||
这种方法是我无意在一片文章中看到的,总体说来,比较简单。就像把大象放进冰箱一样,总共分三步:
|
||||
|
||||
第一步:把冰箱门打开
|
||||
|
||||
//建立到服务端的连接
|
||||
|
||||
rc = lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=128.64.64.23:8988", LrsLastArg);
|
||||
|
||||
if (rc==0)
|
||||
|
||||
lr_output_message("Socket was successfully created ");
|
||||
|
||||
else
|
||||
|
||||
lr_output_message("An error occurred while creating the socket, Error Code: %d", rc);
|
||||
|
||||
第二步:把大象装进去
|
||||
|
||||
lrs_send("socket0", "buf0", LrsLastArg); //往"socket0"发送"buf0"中的数据
|
||||
|
||||
lrs_receive("socket0", "buf1", LrsLastArg);//将"socke0"中返回的数据存放到"buf1"中
|
||||
|
||||
第三步:把冰箱门带上
|
||||
|
||||
//关闭连接
|
||||
|
||||
lrs_close_socket("socket0");
|
||||
|
||||
**2.2 详细划分步骤**
|
||||
|
||||
◇变量的声明与定义
|
||||
|
||||
◇ 创建socket连接
|
||||
|
||||
◇ 发送socket请求
|
||||
|
||||
◇ 接收socket响应
|
||||
|
||||
◇ 从返回Buffer 中抽取结果
|
||||
|
||||
◇ 结果判断
|
||||
|
||||
◇ 释放内存
|
||||
|
||||
◇ 断开连接。
|
||||
|
||||
**2.3 实例脚本**
|
||||
|
||||
下面我们就是用一个实际项目不同报文格式的脚本进行讲解;
|
||||
|
||||
若项目是短连接,且报文不是从文件中读取信息时,vuser_init和vuser_end部分默认即可,主要在Action中开发测试脚本和在data.ws中传输数据到Action的代码中。
|
||||
|
||||
**Vuser_init.c**
|
||||
|
||||
|
||||
|
||||
```Plain Text
|
||||
#include "lrs.h"
|
||||
vuser_init(){
|
||||
lrs_startup(257);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
**Action.c**
|
||||
|
||||
**Vuser_end.c**
|
||||
|
||||
```Plain Text
|
||||
#include "lrs.h"
|
||||
vuser_end(){
|
||||
lrs_cleanup();
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
**data.ws**
|
||||
|
||||
1)**XML**报文格式
|
||||
|
||||
```Plain Text
|
||||
;WSRData 2 1
|
||||
send buf0 360
|
||||
"<?xmlversion=\"1.0\"encoding=\"GBK\"?>"
|
||||
"<TRANINFO>"
|
||||
"<HEAD>"
|
||||
"<TransCode>S001</TransCode>"
|
||||
"<TransDate>20170613</TransDate>""<TransTime>144206</TransTime>""<TransNo>21219603</TransNo>""<Operator>999088</Operator>""<TransInst>70090</TransInst>""</HEAD>""<MSG>""<CustomerID><userID></CustomerID>""<Type>3</Type>""<BusinessType>01</BusinessType>""</MSG>""</TRANINFO>"
|
||||
|
||||
recv buf1 300
|
||||
""
|
||||
-1
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**2)16进制报文格式**
|
||||
|
||||
其中buf0代表发送的报文的名称,后跟的数字代码发送报文长度,其下放置发送报文;
|
||||
|
||||
buf1代表接收报文的名称,后跟数字代表接收报文长度,其下放置接收报文。
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
之前,给大家分享了LoadRunner编写socket协议脚本的[基本方法与规则](https://www.likecs.com/default/index/url?u=aHR0cHM6Ly93d3cuY25ibG9ncy5jb20vendoLVNlZWtpbmcvcC8xMDgzODY3Mi5odG1s),今天给大家分享下,如何从本地文件,读取内容,并作为报文,发送到服务端;该方法也是在工作中遇到的一个难点,想通过这种方法,进行参数化几个交易的报文,通过迭代读取不同的文件,即可以发送不同的交易报文。
|
||||
|
||||
1. int和end与默认一致,不再做说明;
|
||||
|
||||
2. Action脚本编写
|
||||
|
||||
```Plain Text
|
||||
#include "lrs.h"
|
||||
|
||||
|
||||
Action()
|
||||
{
|
||||
|
||||
int rc,rv;//保存连接成功返回值
|
||||
char *recvBuf;//保存接收数据的内容
|
||||
int recvLen;//保存接收数据的大小
|
||||
|
||||
|
||||
int count, total = 0;
|
||||
char buffer[1000];
|
||||
long file_stream;
|
||||
char * filename = "E:/LR_date/LR_scripts/baowen.txt";
|
||||
if ((file_stream = fopen(filename, "rb")) == NULL ) {
|
||||
lr_error_message ("Cannot open %s", filename);
|
||||
return -1;
|
||||
}
|
||||
// Read until end of file
|
||||
while (!feof(file_stream)) {
|
||||
// Read 1000 bytes while maintaining a running count
|
||||
count = fread(buffer,sizeof(char), 1000, file_stream);
|
||||
lr_output_message ("%d bytes read", count);
|
||||
// lr_output_message ("读取文件的buffer内容:\n %s", buffer);
|
||||
if (ferror(file_stream)) { /* Check for file I/O errors */
|
||||
lr_output_message ("Error reading file %s", filename);
|
||||
break;
|
||||
}
|
||||
total += count; // Add up actual bytes read
|
||||
}
|
||||
// Display final total
|
||||
lr_output_message ("Total number of bytes read = %d", total );
|
||||
// Close the file stream
|
||||
if (fclose(file_stream))
|
||||
lr_error_message ("Error closing file %s", filename);
|
||||
|
||||
|
||||
// memcpy(buffer+271,lr_eval_string("<custID>"),8);
|
||||
|
||||
lrs_save_param_ex("socket0", "user", buffer, 0, strlen(buffer),NULL, "paraBuf");
|
||||
|
||||
rc=lrs_create_socket("socket0","TCP","RemoteHost=188.177.155.233:7700", LrsLastArg);
|
||||
|
||||
|
||||
lr_start_transaction("测试");//事务开始
|
||||
|
||||
//发送socket请求消息(数据包内容放在data.ws中)
|
||||
lrs_send("socket0", "buf1", LrsLastArg); //取缓冲区buf0的报文并发送
|
||||
|
||||
|
||||
rv = lrs_receive("socket0", "buf2", LrsLastArg);//接收响应报文
|
||||
|
||||
|
||||
//获取最后收到的buffer和大小
|
||||
lrs_get_last_received_buffer("socket0",&recvBuf,&recvLen);
|
||||
|
||||
|
||||
/*设置检查点,验证返回数据是否成功,这个根据各交易具体情况进行判断,*/
|
||||
|
||||
if(recvLen>3)
|
||||
{
|
||||
lr_end_transaction("测试",PASS);
|
||||
}
|
||||
else
|
||||
{
|
||||
lr_end_transaction("测试",FAIL);
|
||||
lr_error_message("测试失败!出错信息:[%s]",recvBuf);
|
||||
}
|
||||
|
||||
lrs_free_buffer(recvBuf);//释放recvBuf内存空间,否则会引起内存泄露
|
||||
|
||||
|
||||
lrs_close_socket("socket0");
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
脚本上半部分是指定从某路径下,读取文件内容。有人要说那我如果想对文件中,某一字段进行参数化怎么办;于是我们就可以利用memcpy这个函数进行参数化,举例如:memcpy(buffer+271,lr_eval_string("<custID>"),8); //这是对读取报文的第272位到279位通过调用参数化池custID的值,共8位字节进行参数化。
|
||||
|
||||
3. data.ws编写
|
||||
|
||||
```Plain Text
|
||||
;WSRData 2 1
|
||||
|
||||
send buf1 683
|
||||
"<paraBuf>"
|
||||
|
||||
recv buf2 350
|
||||
""
|
||||
-1
|
||||
```
|
||||
|
||||
其中,报文在Action中已经获取到,由lrs_save_param_ex函数关联存储到paraBuf参数中;此时,我们可以直接通过该参数名调用即可,如上。
|
||||
|
||||
ENDing...
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
|
||||
[时间](Mysql+bb4c723d-1d69-4a35-9ad7-4e9494631eac/%E6%97%B6%E9%97%B4%20cc17faf4-4319-4e39-b121-5ca53bf1f6d4.md)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
1. 时间默认值 CURRENT_TIMESTAMP
|
||||
|
||||
2. 更新为当前时间 CURRENT_TIMESTAMP
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
[https://pkgs.org/
|
||||
](https://pkgs.org/)[http://rpmfind.net
|
||||
](http://rpmfind.net/)[http://rpm.pbone.net/](http://rpm.pbone.net/)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
@Component
|
||||
|
||||
通用组件
|
||||
|
||||
|
||||
|
||||
@RequestParam
|
||||
|
||||
get/post 提交参数
|
||||
|
||||
|
||||
|
||||
@RequestBody
|
||||
|
||||
json 参数
|
||||
|
||||
|
||||
|
||||
@PathVariable
|
||||
|
||||
url 中的参数
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
[开机启动](Windows+4ceafe2a-da53-442e-9d10-fa4b1200b847/%E5%BC%80%E6%9C%BA%E5%90%AF%E5%8A%A8%20871f7837-e86d-441f-984f-e9a5881b0504.md)
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
[git 乱改你的换行符?](git+4dd326d3-d712-41d7-b801-6a3f731fcfbb/git+%E4%B9%B1%E6%94%B9%E4%BD%A0%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%EF%BC%9F%2048a660a5-f048-4cfc-8fe9-3799fc47f091.md)
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
```Plain Text
|
||||
%USERPROFILE%\.gitconfig
|
||||
```
|
||||
|
||||
|
||||
|
||||
```Plain Text
|
||||
[core]
|
||||
autocrlf = true
|
||||
```
|
||||
|
||||
|
||||
|
||||
有三个可选值:
|
||||
|
||||
- true
|
||||
|
||||
- false
|
||||
|
||||
- input
|
||||
|
||||
在 Windows 系统上:
|
||||
|
||||
- `true` 表示在推送时转成 `\n`,在拉取时转成 `\r\n`。这样的设置让 Windows 的开发者能兼容很多的开发工具(比如早期的记事本,新的已经支持 `\r\n` 了),不至于遇到很多换行符问题。
|
||||
|
||||
- `false` 表示在推送时和拉取时都原样保留换行符。这样的设置在所有程序员都在同一个平台开发时很有用,git 完全不处理换行符,全部改由开发者自行解决。
|
||||
|
||||
- `input` 表示在推送时转成 `\n`,在拉取时原样保留换行符。注意到,这样的设置会让仓库里所有的换行符都变成 `\n` 不再有什么时候有 `\r\n` 了,所以对 Windows 平台的开发者并不友好。
|
||||
|
||||
以前的服务器全局配置没有问题,是因为服务器配置为 `true`,于是拉下来时一定都是 `\r\n` 哈希正确。而现在全局配置是 `false`,于是会原样把 git 仓库里的拉下来,哈希错误。
|
||||
|
||||
是的,你没看错!远程 git 仓库里的是错的!这是因为有小伙伴使用了 `true` 或者 `input` 的配置,导致推送时统一把换行符改成了 `\r\n`。
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
|
||||
|
||||
[RHEL8/CentOS8 的基础防火墙配置](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/RHEL8+CentOS8+%E7%9A%84%E5%9F%BA%E7%A1%80%E9%98%B2%E7%81%AB%E5%A2%99%E9%85%8D%E7%BD%AE%20774c5327-7ef7-4646-ba53-fa06b59fc668.md)
|
||||
|
||||
[tar 解压缩命令详解](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/tar+%E8%A7%A3%E5%8E%8B%E7%BC%A9%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3%208da747a5-d3f2-406e-9a96-598f6618cf99.md)
|
||||
|
||||
[代理](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/%E4%BB%A3%E7%90%86%2006beec7c-cf13-4652-8ee6-5b87e6db6e78.md)
|
||||
|
||||
[统信授权](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/%E7%BB%9F%E4%BF%A1%E6%8E%88%E6%9D%83%20e6a80fec-3ed8-4f3c-8eaa-dceabaf29bf0.md)
|
||||
|
||||
[vnc](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/vnc%20fe6c0cba-f76c-42d9-b3d7-3efb30bdcff2.md)
|
||||
|
||||
[ab 压力测试工具](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/ab+%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7%2021ec8f2e-655d-4adc-a17b-98ea7959fabd.md)
|
||||
|
||||
[动态库加载路径](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/%E5%8A%A8%E6%80%81%E5%BA%93%E5%8A%A0%E8%BD%BD%E8%B7%AF%E5%BE%84%20554524c7-6c05-43de-90c0-18330f63253b.md)
|
||||
|
||||
[crontab 语法](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/crontab+%E8%AF%AD%E6%B3%95%2026c33699-87e9-42d1-883b-ca297fb46d9b.md)
|
||||
|
||||
[【Linux】网卡的7种bond模式](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/%E3%80%90Linux%E3%80%91%E7%BD%91%E5%8D%A1%E7%9A%847%E7%A7%8Dbond%E6%A8%A1%E5%BC%8F%20b2b489d3-04b8-408e-aa7a-fd86d41266ba.md)
|
||||
|
||||
[linux-shell-screen后台调用-后台运行脚本和命令-仿start命令-伪窗口界面](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/linux-shell-screen%E5%90%8E%E5%8F%B0%E8%B0%83%E7%94%A8-%E5%90%8E%E5%8F%B0%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%E5%92%8C%E5%91%BD%E4%BB%A4-%E4%BB%BFstart%E5%91%BD%E4%BB%A4-%E4%BC%AA%E7%AA%97%E5%8F%A3%E7%95%8C%E9%9D%A2%20728e2f7b-e5f5-4399-8d25-1e22f83beaa1.md)
|
||||
|
||||
[RedHat 8 重置 root 密码](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/RedHat+8+%E9%87%8D%E7%BD%AE+root+%E5%AF%86%E7%A0%81%204756999d-a9ae-43db-8ecb-b4a5207164ee.md)
|
||||
|
||||
[保证 authorized_keys 文件的安全](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/%E4%BF%9D%E8%AF%81+authorized_keys+%E6%96%87%E4%BB%B6%E7%9A%84%E5%AE%89%E5%85%A8%202ea1aae4-21b5-464f-98f1-fcab32462893.md)
|
||||
|
||||
[Shell 命令](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/Shell+%E5%91%BD%E4%BB%A4%20efa69a8c-b609-4e69-b98f-1c0512054046.md)
|
||||
|
||||
[程序如何判断自己是被人工从 shell 调用,还是从 sh 脚本调用?](linux+065d79c9-1446-43b4-b54a-1de32f88bca9/%E7%A8%8B%E5%BA%8F%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E8%87%AA%E5%B7%B1%E6%98%AF%E8%A2%AB%E4%BA%BA%E5%B7%A5%E4%BB%8E+shell+%E8%B0%83%E7%94%A8,%E8%BF%98%E6%98%AF%E4%BB%8E+sh+%E8%84%9A%E6%9C%AC%E8%B0%83%E7%94%A8+%20fb9af8e1-414e-4733-a6fe-d6a7dee6fa4c.md)
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
|
||||
|
||||
## 基础操作
|
||||
场景的位移(shift+中)、旋转(长按中键)、缩放(滚动中键)
|
||||
对象的位移(G)、旋转(R)、缩放(S)
|
||||
视图:正(1)、侧(3)、透(5)、定(7)。最大化( .)。独显(/)
|
||||
|
||||
|
||||
- 尺寸和精度问题
|
||||
- 默认是米
|
||||
- 视图内勾选尺寸
|
||||
|
||||
- 物体厚度问题
|
||||
- 默认没有厚度
|
||||
- 封闭面会自动加厚度
|
||||
- 不封闭的面导出时设置,实体修改器。
|
||||
|
||||
- 多物体结合问题
|
||||
- 封闭部分不会被打印
|
||||
|
||||
- 倒角支撑问题
|
||||
- 悬垂角度不要小于 30 度
|
||||
|
||||
- 导出以及切片软件设置
|
||||
- 3D 打印插件。Mesh 3D print
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
### 与提交(commit)相关的变量
|
||||
|
||||
- **`${{ github.sha }}`**:当前提交的完整 SHA-1 哈希值。
|
||||
- **`${{ github.event.before }}`**:在触发事件之前的提交的 SHA-1 哈希值,常用于 `push` 事件。
|
||||
- **`${{ github.event.after }}`**:在触发事件之后的提交的 SHA-1 哈希值,常用于 `push` 事件。
|
||||
|
||||
### 与分支(branch)和标签(tag)相关的变量
|
||||
|
||||
- **`${{ github.ref }}`**:完整的引用名称,像是 `refs/heads/main` (针对分支)或者 `refs/tags/v1.0.0` (针对标签)。
|
||||
- **`${{ github.ref_name }}`**:引用的短名称,即分支名或者标签名。例如,若 `github.ref` 为 `refs/heads/main`,那么 `github.ref_name` 就是 `main`。
|
||||
- **`${{ github.ref_type }}`**:引用的类型,值为 `branch` 或者 `tag`。
|
||||
|
||||
### 与仓库(repository)相关的变量
|
||||
|
||||
- **`${{ github.repository }}`**:仓库的完整名称,格式为 `owner/repo`,例如 `octocat/hello-world`。
|
||||
- **`${{ github.repository_owner }}`**:仓库所有者的名称,例如 `octocat`。
|
||||
- **`${{ github.event.repository.html_url }}`**:仓库的 HTML 网址。
|
||||
|
||||
### 与工作流(workflow)相关的变量
|
||||
|
||||
- **`${{ github.workflow }}`**:当前运行的工作流名称。
|
||||
- **`${{ github.run_id }}`**:当前工作流运行的唯一标识符。
|
||||
- **`${{ github.run_number }}`**:当前工作流在仓库中的运行编号。
|
||||
|
||||
### 与事件(event)相关的变量
|
||||
|
||||
- **`${{ github.event_name }}`**:触发工作流运行的事件名称,例如 `push`、`pull_request` 等。
|
||||
- **`${{ github.event_path }}`**:包含事件有效负载的 JSON 文件的路径。
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
|
||||
环境:
|
||||
MacBook Pro 13
|
||||
jdk8
|
||||
`IntelliJ IDEA 2020.1.1`
|
||||
|
||||
问题:
|
||||
IDEA环境,单独跑test case 文件/ 方法、main方法,提示`Error:Groovy-Eclipse: Compilation failed`
|
||||
|
||||
现象:
|
||||

|
||||
|
||||
分析:
|
||||
如现象图:**2** 可以引导;点击进入“[Compiler](https://so.csdn.net/so/search?q=Compiler&spm=1001.2101.3001.7020)” 配置
|
||||

|
||||
从 `Conmpiler` 进入 **Java Compiler**:
|
||||
**2** 可以可以选 `Use compiler`
|
||||
|
||||

|
||||
选择`Javac -> Apply`,
|
||||
|
||||
> 重试 test case/main 方法 可以正常运行。
|
||||
@@ -0,0 +1,169 @@
|
||||
## 生成 jfr
|
||||
|
||||
JDK飞行记录器(JFR)是一种结构化日志记录工具, 它记录广泛的系统级(system-level)事件。类似于飞机上的黑盒子,它会持续记录飞行数据,用于调查飞行事故。JFR会持续记录JVM中的 一系列事件,用于诊断问题。这种方式的优势是,它会按时间顺序,捕获导致事故的,详细系统信息。JFR被设计的,对于性能影响很小,所以 可以安全地在生产环境长时间运行。
|
||||
|
||||
**优势:**
|
||||
|
||||
1. 对于运行系统的影响比较小,额外占用资源小于 1%
|
||||
|
||||
2. 生成的文件比较小,通常生成 10 多分钟的文件往往小于 1G
|
||||
|
||||
|
||||
## 查询 java 进程
|
||||
|
||||
1. 通过 jps 命令查询
|
||||
|
||||
|
||||

|
||||
|
||||
image.png
|
||||
|
||||
1. 通过 ps -ef | grep java 查询
|
||||
|
||||
|
||||
## 生成 jfr 文件
|
||||
|
||||
生成飞行记录,使用 JFR.start 该实用程序的诊断命令 jcmd。
|
||||
|
||||
```text
|
||||
jcmd 84743 JFR.start duration=5m settings=profile filename=~/jfr/xxkk.jfr
|
||||
```
|
||||
|
||||
## JProfile 介绍
|
||||
|
||||
JProfiler是一个用于分析运行JVM内部情况的专业工具。在开发中你可以使用它,用于质量保证,也可以解决你的生产系统遇到的问题。JProfiler处理四个主要问题:
|
||||
|
||||
- **方法调用**这通常被称为"CPU分析"。方法调用可以通过不同的方式进行测量和可视化, 分析方法调用可以帮助了解你的应用程序正在做什么,并找到提高其性能的方法。
|
||||
|
||||
- **分配**分析堆上对象的分配、引用链和垃圾回收属于"内存分析"的范畴。这个功能可以让你解决内存泄漏,总之使用更少的内存,分配更少的临时对象。
|
||||
|
||||
- **线程和锁**线程可以持有锁,例如通过在一个对象上做同步。当多个线程协作时,可能会出现死锁,JProfiler可以为你可视化这种情况。此外,锁可能被争用,这意味着线程在获得锁之前必须等待。通过JProfiler可以深入了解线程及其各种锁情形。
|
||||
|
||||
- **高层子系统**许多性能问题发生在更高的语义层面。例如,对于JDBC调用,你可能想找出哪条SQL语句是最慢的。对于这样的子系统,JProfiler提供了"探针",将特定有效载荷附加到调用树。
|
||||
|
||||
|
||||
JProfiler的UI是一个桌面应用程序。你可以以交互的方式实时分析JVM,也可以在不使用UI的情况下,自动化分析。保存在快照中的分析数据,可以通过JProfiler UI打开。此外,命令行工具和构建工具集成可以帮助你自动分析会话。
|
||||
|
||||
注意:JProfile 是商业软件,希望大家在使用的过程中购买正版授权
|
||||
|
||||
## 内存分析
|
||||
|
||||
记录的对象
|
||||
|
||||
内存分析中,可以通过记录的对象找到最耗费内存的对象。只有总对象大小超过固定阈值(通常是堆的1%)的类才会被记录。默认情况下,JFR中禁用了这个功能,因为它会引入大量的开销。下面两个字段的解释:
|
||||
|
||||
- **实例计数示例, **可以看到某个用例的堆上还剩下哪些对象(实际上会小于总大小除以每个对象的平均大小)。
|
||||
|
||||
- **预估总大小,**这个是一个预估值,预估在开始 jfr 记录,到 jfr 记录结束这个类的实例总大小
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
[https://docs.oracle.com/en/java/javase/17/docs/specs/man/jfr.html](https://link.zhihu.com/?target=https%3A//docs.oracle.com/en/java/javase/17/docs/specs/man/jfr.html)
|
||||
|
||||
### 分配热点
|
||||
|
||||
分配热点视图与分配调用树一起,允许你直接关注负责创建所选类的方法。就像记录的对象视图,分配热点视图也支持标记当前状态和观察一段时间内的差值。视图中会添加一个差值列,它显示了热点自当_标记当前值_操作被调用后的变化。因为默认情况下,分配视图不会定期更新,所以你必须单击_计算_工具栏按钮以获得一个新数据集然后与基线值比较。
|
||||
|
||||
1. 计算热点
|
||||
|
||||
|
||||

|
||||
|
||||
image.png
|
||||
|
||||
1. 热点分析
|
||||
|
||||
|
||||

|
||||
|
||||
image.png
|
||||
|
||||
1. 热点的分配类
|
||||
|
||||
|
||||

|
||||
|
||||
image.png
|
||||
|
||||
**找到主要是因为 byte[] 数组分配,成为一个分配热点方法。**
|
||||
|
||||
### 测试代码
|
||||
|
||||
```text
|
||||
/**
|
||||
* VM ARG : -Xms64m -Xmx64m
|
||||
*/
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
List<byte[]> list = new ArrayList<>(1000);
|
||||
//2kb * 10 * 120 = 2400kb
|
||||
//数量 = 10 * 120 / 10 = 120
|
||||
for (int i = 0; i < 10000; i++) {
|
||||
Thread.sleep(100);
|
||||
byte[] arr = new byte[1024 * 2];
|
||||
list.add(arr);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## CPU 分析
|
||||
|
||||
### 调用树
|
||||
|
||||
跟踪所有的方法调用及其调用栈会消耗相当大的内存,短时间内就会耗尽所有内存。另外,在一个繁忙的JVM中,很难直观获得方法调用的数量。通常情况下,这个数字是如此之大,以至于定位和跟随跟踪是不可能的。
|
||||
另一个方面,只有将收集到的数据进行汇总,许多性能问题才会变得清晰。这样,你就可以知道在某个时间段内,方法调用相对于整个活动的重要性。如果是单一的跟踪,你对你所看的数据的相对重要性没有概念。
|
||||
这就是为什么JProfiler建立了一个所有观察到的调用堆栈的累积树,并注解有观察到的时间和调用次数。时间顺序信息被消除,只保留总数。树中的每个节点代表一个至少被观察过一次的调用堆栈。节点的子节点代表在该调用堆栈中看到的所有传出调用。
|
||||
|
||||

|
||||
|
||||
|
||||
调用树是"CPU视图"部分的第一个视图,当你开始进行CPU分析时,它是一个很好的起点, 因为遵循方法调用从起点到最细化的终点的自上而下视图,最容易理解。JProfiler按照子节点的总时间进行排序,所以你可以深度优先打开树,分析对性能影响最大的部分。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
### 热点
|
||||
|
||||
如果你的应用程序运行得太慢,你要找到那些占用大部分时间的方法。通过调用树,有时可以直接找到这些方法, 但通常这样做是行不通的,因为调用树可能很大而且有大量叶节点在这种情况下,你需要反转调用树:一个所有方法的列表,按其总的自身时间排序,从所有不同的调用堆栈中累计出来, 并通过回溯跟踪显示这些方法是如何被调用的。在热点树中,叶节点是入口点, 就像应用程序的main 方法或线程的run 方法。从热点树中最深的节点开始,调用向上传递到顶层节点。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
回溯跟踪中的调用次数和执行时间并不是指该方法节点,而是指顶层热点节点在这条路径上被调用的次数。理解这一点很重要:粗略一看,你会认为看到的节点上的信息是该节点的调用次数。然而,在热点树中,该信息显示的是该节点对顶层节点的**贡献**。所以,你必须这样理解这些数字: 沿着这个倒置的调用堆栈,顶层热点被调用了n 次,总持续时间为t 秒。
|
||||
|
||||

|
||||
|
||||
|
||||
**通过这里可以看到这个 CASE 是因为正则导致的 CPU 热点**
|
||||
|
||||
### 测试代码
|
||||
|
||||
```text
|
||||
static String pattern = " ^([\\u4e00-\\u9fa5]+)((·[\\u4e00-\\u9fa5]+)+|([\\u4e00-\\u9fa5]+))$";
|
||||
static String defaultName = "张三·无论其是看都看呐阿斯顿啊·萨肯萨肯打开你发都看啊看你发个卡看那可能发看那个可能看呐";
|
||||
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
int time = 1;
|
||||
String result;
|
||||
while (true) {
|
||||
if (time > 0) {
|
||||
Thread.sleep(time);
|
||||
}
|
||||
result = defaultName.matches(pattern) ? "姓名合法" : "姓名不合法";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 参考文档
|
||||
|
||||
- jcmd 指令详解:[https://docs.oracle.com/javacomponents/jmc-5-5/jfr-command-reference/diagnostic-command-reference.htm](https://link.zhihu.com/?target=https%3A//docs.oracle.com/javacomponents/jmc-5-5/jfr-command-reference/diagnostic-command-reference.htm)
|
||||
|
||||
- 生成 jfr 文件:[https://docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/run.htm](https://link.zhihu.com/?target=https%3A//docs.oracle.com/javacomponents/jmc-5-5/jfr-runtime-guide/run.htm)
|
||||
|
||||
- jprofile 中文手册:[https://www.ej-technologies.com/res](https://link.zhihu.com/?target=https%3A//www.ej-technologies.com/resources/jprofiler/v/13.0/help_zh_CN/doc/main/memory.html)
|
||||
@@ -0,0 +1,186 @@
|
||||
## 1、前言
|
||||
|
||||
我们是如何发现这个问题的呢?
|
||||
|
||||
国内有家航司的维护子公司找到我们。他们说某飞机制造商要求航司自研的系统安装到他们生产的飞机上要用硬件Keystore。以前是用软件的Keystore,毕竟不完全。硬件的Keystore,给的文档只有YubiHSM2 FIPS。YubiHSM小巧,性价比高,广受国外各种厂商认可。
|
||||
|
||||

|
||||
|
||||
他们向我们咨询YubiHSM2的集成配置,后来他们发现文档要求是YubiHSM2 FIPS,找飞机制造商确认,他们没有正面回复YubiHSM2是否可以用,只是强调FIPS版本更强大。至少最终我们把签名的流程用YubiHSM调通了,就不知道符合飞机制造商的要求不。
|
||||
|
||||

|
||||
|
||||
飞机制造商提供的Loadable Software Airplane Part (LSAP) Librarian Suite系统就是Java写的,其中CSCT模块通过PKCS#11对调用YubiHSM2的dll,进行签名。吐槽下,在配置中遇到和种问题。这么顶级的厂商的文档也不能全信的,文档里提的明明支持的版本,测试下来就是不支持。想着之前掉飞机的事,安全生产之路还任重道远。
|
||||
|
||||

|
||||
|
||||
我们遇到的报错:
|
||||
|
||||
```text
|
||||
2023-09-25 23:48:02,340 [ModalContext] ERROR com.xxxx.xxxx.xxx - logMsg() internalSignSingleItem() Could not initialize the keystore credentials provider:
|
||||
Could not find SunPKCS11 constructor (sun.security.pkcs11.SunPKCS11.<init>(java.lang.String)).
|
||||
Click Tools | Settings | Keystores and fill in the keystore information section.
|
||||
java.security.ProviderException: Could not find SunPKCS11 constructor
|
||||
```
|
||||
|
||||
## 2、Java 9对Sun PKCS 11的变更
|
||||
|
||||
PKCS11 Povider支持不再的Java版本。为了与智能卡或令牌设备进行身份验证或签名,PKCS#11是实现这一目标的标准之一。Java提供了SunPKCS11 Provider程序,这是一种包装器(wrapper),我们可以用它来与这类设备进行通信的本地库进行交互。基本上,我们在操作系统中安装一个库(dll、so或dylib文件),该库通常由设备供应商提供,然后通过SunPKCS11 Provider程序,我们指定设备的PKCS11[库文件](https://zhida.zhihu.com/search?content_id=234556817&content_type=Article&match_order=1&q=%E5%BA%93%E6%96%87%E4%BB%B6&zhida_source=entity),PKCS11提供程序负责与设备进行交互。
|
||||
|
||||
因此,Java有现成的支持来与这些设备进行交互。然而,在Java 9中,对如何初始化SunPKCS11 Provider程序进行了一些变更,这些变量与Java的早期版本不再兼容。
|
||||
|
||||

|
||||
|
||||
## 3、SunPKCS11在Java 8及更早的版本
|
||||
|
||||
在Java 8和之前的版本中创建和配置SunPKCS11实例的步骤如下:
|
||||
|
||||
```java
|
||||
import sun.security.pkcs11.SunPKCS11;
|
||||
|
||||
String configName = "/opt/bar/cfg/pkcs11.cfg";
|
||||
Provider p = new SunPKCS11(configName);
|
||||
Security.addProvider(p);
|
||||
```
|
||||
|
||||
基本上,给定一个包含该提供程序配置(库文件、名称等)的文件`/opt/bar/cfg/pkcs11.cfg`,我们能够仅使用构造函数就能初始化和配置SunPKCS11。最后,新创建的Provider程序被添加到安全上下文中。
|
||||
|
||||

|
||||
|
||||
## 4、SunPKCS11在Java 9及更高版本
|
||||
|
||||
以下是在Java 9或更高版本中创建和配置SunPKCS11实例的步骤。
|
||||
|
||||
```java
|
||||
import sun.security.pkcs11.SunPKCS11
|
||||
|
||||
String configName = "/opt/bar/cfg/pkcs11.cfg";
|
||||
Provider p = Security.getProvider("SunPKCS11");
|
||||
p = p.configure(configName);
|
||||
Security.addProvider(p);
|
||||
```
|
||||
|
||||
在这种情况下,SunPKCS11类没有可用的构造函数来实例化它,配置是在一个单独的步骤中完成的,通过configure(String configFile)方法。最后,新的Provider实例(配置后)被添加到安全上下文中。
|
||||
|
||||
通过安全上下文,使用getProvider方法,可以获得SunPKCS11的一个实例。它返回一个作为“模板”的“空(empty)”实例,然后我们使用configure方法。
|
||||
|
||||
```text
|
||||
SunPKCS11没有公共构造函数的原因是因为Java 9中添加了模块封装。因为它属于sun.*包,它们默认受到代码访问的限制。
|
||||
```
|
||||
|
||||

|
||||
|
||||
## 5、跨版本解决方案
|
||||
|
||||
如我们所见,两种方法都改变了如何初始化和配置它。由于两者的定义(构造函数和方法)都不同,因此两种方法都不兼容。如果我们有一个可能在Java 8和更新版本上运行的应用程序,该如何实现呢?
|
||||
|
||||
解决方案是使用Java反射API。
|
||||
|
||||
```java
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.security.Provider;
|
||||
import java.security.Security;
|
||||
|
||||
private static final String SUN_PKCS11_CLASSNAME = "sun.security.pkcs11.SunPKCS11";
|
||||
private static final String SUN_PKCS11_PROVIDER_NAME = "SunPKCS11";
|
||||
|
||||
try {
|
||||
int javaVersion = JavaVersionUtil.getVersion();
|
||||
if(javaVersion >= 9){
|
||||
Provider prototype = Security.getProvider(SUN_PKCS11_PROVIDER_NAME);
|
||||
Class<?> sunPkcs11ProviderClass = Class.forName(SUN_PKCS11_CLASSNAME);
|
||||
Method configureMethod = sunPkcs11ProviderClass.getMethod("configure", String.class);
|
||||
return (Provider) configureMethod.invoke(prototype, configFile);
|
||||
} else {
|
||||
Class<?> sunPkcs11ProviderClass = Class.forName(SUN_PKCS11_CLASSNAME);
|
||||
Constructor<?> constructor = sunPkcs11ProviderClass.getConstructor(String.class);
|
||||
return (Provider) constructor.newInstance(configFile);
|
||||
}
|
||||
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
|
||||
| IllegalArgumentException | InvocationTargetException
|
||||
| NoSuchMethodException | SecurityException ex) {
|
||||
//Handle any error, log message or throw an exception
|
||||
}
|
||||
```
|
||||
|
||||
基本上,它是在运行时检测正在运行的Java版本,并根据其值访问SunPKCS11类在每个版本上的不同方法。在Java 8及之前的版本中,使用构造函数进行配置,或者在Java 9或更高版本中使用“configure”方法。
|
||||
|
||||

|
||||
|
||||
## 6、在运行时查找Java的版本
|
||||
|
||||
这部分没有什么高深的科学,它只是检查系统属性java.version上的值。
|
||||
|
||||
```java
|
||||
public class JavaVersionUtil {
|
||||
public static int getVersion() {
|
||||
String version = System.getProperty("java.version");
|
||||
if(version.startsWith("1.")) {
|
||||
version = version.substring(2, 3);
|
||||
} else {
|
||||
int dot = version.indexOf(".");
|
||||
if(dot != -1) { version = version.substring(0, dot); }
|
||||
} return Integer.parseInt(version);
|
||||
}
|
||||
```
|
||||
|
||||
## 7、启用加密模块和包
|
||||
|
||||
从Java 9到15,这些包仍然可以被访问,但在Java 16之后,它们默认不是公开的,因此我们需要添加一些模块子句来进行访问。这可以通过在我们的jar文件的Manifest.MF文件中添加以下几行来完成。
|
||||
|
||||
```text
|
||||
Add-Exports jdk.crypto.cryptoki/sun.security.pkcs11 jdk.crypto.cryptoki/sun.security.pkcs11.wrapper java.base/sun.security.action java.base/sun.security.rsa
|
||||
Add-Opens java.base/java.security java.base/sun.security.util
|
||||
```
|
||||
|
||||
我是通过使用maven-jar-plugin来实现这一点的。
|
||||
|
||||
```xml
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.0.2</version>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
.....
|
||||
</manifest>
|
||||
<manifestEntries>
|
||||
....
|
||||
<Add-Exports>jdk.crypto.cryptoki/sun.security.pkcs11 jdk.crypto.cryptoki/sun.security.pkcs11.wrapper java.base/sun.security.action java.base/sun.security.rsa</Add-Exports>
|
||||
<Add-Opens>java.base/java.security java.base/sun.security.util</Add-Opens>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
```
|
||||
|
||||

|
||||
|
||||
## 8、结论
|
||||
|
||||
希望这段代码能帮助其他面临同样情况的人,即他们需要支持不同版本的Java(例如Java桌面应用程序),并希望提供一个跨版本的解决方案。
|
||||
|
||||
翻译自原文:
|
||||
|
||||
[PKCS 11 Provider across multiple Java versions](https://link.zhihu.com/?target=https%3A//blog.adamgamboa.dev/pkcs-11-provider-across-multiple-java-versions/)
|
||||
|
||||
原文参考:
|
||||
|
||||
[Java PKCS#11 Reference Guide](https://link.zhihu.com/?target=https%3A//docs.oracle.com/javase/7/docs/technotes/guides/security/p11guide.html)
|
||||
|
||||
[Security Developer’s Guide](https://link.zhihu.com/?target=https%3A//docs.oracle.com/en/java/javase/11/security/pkcs11-reference-guide1.html)
|
||||
|
||||
[https://en.wikipedia.org/wiki/PKCS_11](https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/PKCS_11)
|
||||
|
||||
[Reflection in Java - GeeksforGeeks](https://link.zhihu.com/?target=https%3A//www.geeksforgeeks.org/reflection-in-java/)
|
||||
|
||||
我找到的关于此PKCS11版本问题的文章还有:
|
||||
|
||||
[net.jsign.SignerException.<init> java code examples | Tabnine](https://link.zhihu.com/?target=https%3A//www.tabnine.com/code/java/methods/net.jsign.SignerException/%253Cinit%253E)
|
||||
|
||||
[https://github.com/apache/ranger/blob/master/kms/src/main/java/org/apache/hadoop/crypto/key/RangerSafenetKeySecure.java](https://link.zhihu.com/?target=https%3A//github.com/apache/ranger/blob/master/kms/src/main/java/org/apache/hadoop/crypto/key/RangerSafenetKeySecure.java)
|
||||
|
||||
发布于 2023-09-28 16:54・IP 属地美国
|
||||
@@ -0,0 +1,67 @@
|
||||
## systemctl
|
||||
|
||||
```Plain Text
|
||||
systemctl unmask firewalld #执行命令,即可实现取消服务的锁定
|
||||
systemctl mask firewalld #下次需要锁定该服务时执行
|
||||
systemctl start firewalld.service #启动防火墙
|
||||
systemctl stop firewalld.service #停止防火墙
|
||||
systemctl reload firewalld.service #重载配置
|
||||
systemctl restart firewalld.service #重启服务
|
||||
systemctl status firewalld.service #显示服务的状态
|
||||
systemctl enable firewalld.service #在开机时启用服务
|
||||
systemctl disable firewalld.service #在开机时禁用服务
|
||||
systemctl is-enabled firewalld.service #查看服务是否开机启动
|
||||
systemctl list-unit-files|grep enabled #查看已启动的服务列表
|
||||
systemctl --failed #查看启动失败的服务列表
|
||||
```
|
||||
|
||||
## firewall-cmd
|
||||
|
||||
```Plain Text
|
||||
firewall-cmd --state #查看防火墙状态
|
||||
firewall-cmd --reload #更新防火墙规则
|
||||
firewall-cmd --state #查看防火墙状态
|
||||
firewall-cmd --reload #重载防火墙规则
|
||||
firewall-cmd --list-ports #查看所有打开的端口
|
||||
firewall-cmd --list-services #查看所有允许的服务
|
||||
firewall-cmd --get-services #获取所有支持的服务
|
||||
|
||||
#区域相关
|
||||
firewall-cmd --list-all-zones #查看所有区域信息
|
||||
firewall-cmd --get-active-zones #查看活动区域信息
|
||||
firewall-cmd --set-default-zone=public #设置public为默认区域
|
||||
firewall-cmd --get-default-zone #查看默认区域信息
|
||||
firewall-cmd --zone=public --add-interface=eth0 #将接口eth0加入区域public
|
||||
|
||||
#接口相关
|
||||
firewall-cmd --zone=public --remove-interface=eth0 #从区域public中删除接口eth0
|
||||
firewall-cmd --zone=default --change-interface=eth0 #修改接口eth0所属区域为default
|
||||
firewall-cmd --get-zone-of-interface=eth0 #查看接口eth0所属区域
|
||||
|
||||
#端口控制
|
||||
firewall-cmd --add-port=80/tcp --permanent #永久添加80端口例外(全局)
|
||||
firewall-cmd --remove-port=80/tcp --permanent #永久删除80端口例外(全局)
|
||||
firewall-cmd --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(全局)
|
||||
c #永久添加80端口例外(区域public)
|
||||
firewall-cmd --zone=public --remove-port=80/tcp --permanent #永久删除80端口例外(区域public)
|
||||
firewall-cmd --zone=public --add-port=65001-65010/tcp --permanent #永久增加65001-65010例外(区域public)
|
||||
firewall-cmd --query-port=8080/tcp # 查询端口是否开放
|
||||
firewall-cmd --permanent --add-port=80/tcp # 开放80端口
|
||||
firewall-cmd --permanent --remove-port=8080/tcp # 移除端口
|
||||
firewall-cmd --reload #重启防火墙(修改配置后要重启防火墙)
|
||||
```
|
||||
|
||||
## 改用 iptables.service
|
||||
|
||||
```Plain Text
|
||||
yum install iptables-services #安装iptables
|
||||
systemctl stop firewalld.service #停止firewalld
|
||||
systemctl mask firewalld.service #禁止自动和手动启动firewalld
|
||||
systemctl start iptables.service #启动iptables
|
||||
systemctl start ip6tables.service #启动ip6tables
|
||||
systemctl enable iptables.service #设置iptables自启动
|
||||
systemctl enable ip6tables.service #设置ip6tables自启动
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
1. 开机界面按 e
|
||||
|
||||

|
||||
|
||||
2、修改部分参数
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
1. 按 Ctrl-x 进行启动进入救援模式
|
||||
|
||||

|
||||
|
||||
4、逐条输入命令
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
5、修改成功,登陆测试
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
注意:在修改工程中touchu /.autorelabel 输入出差会导致 redhat8 更改密码无法进入,出现以下报错:
|
||||
|
||||
Stopping User Manager for UID 123
|
||||
|
||||
卡在 starting Networking Manager
|
||||
|
||||
这时需要进入系统,相同步骤,正常位置输入正确的touch /.atuorelabel 即可
|
||||
|
||||
|
After Width: | Height: | Size: 60 KiB |
@@ -0,0 +1,378 @@
|
||||
## Cryptoki 库概述
|
||||
|
||||
Solaris [加密](https://so.csdn.net/so/search?q=%E5%8A%A0%E5%AF%86&spm=1001.2101.3001.7020)框架中的用户级应用程序通过 libpkcs11.so 模块中所提供的 cryptoki 库来访问 PKCS #11 函数。pkcs11_softtoken.so 模块是由 Sun Microsystems, Inc. 提供的 PKCS #11 软令牌实现,用于提供加密机制。软令牌插件是缺省的机制源。加密机制还可以通过第三方插件提供。
|
||||
|
||||
本节列出了软令牌所支持的 PKCS #11 函数和返回值,返回代码根据插入到[框架](https://so.csdn.net/so/search?q=%E6%A1%86%E6%9E%B6&spm=1001.2101.3001.7020)中的提供者而异。本节还介绍了一些常见的函数。有关 cryptoki 库中所有元素的完整说明,请参阅相应的手册页或[http://www.rsasecurity.com/rsalabs/pkcs/pkcs-11](http://www.rsasecurity.com/rsalabs/pkcs/pkcs-11)。
|
||||
|
||||
### PKCS #11 函数列表
|
||||
|
||||
下面列出了 Solaris 加密框架中的 pkcs11_softtoken.so 所支持的 PKCS #11 函数类别以及相关函数:
|
||||
|
||||
- **通用**-**C_Initialize()**、**C_Finalize()**、**C_GetInfo()** 和 **C_GetFunctionList()**
|
||||
|
||||
- **会话管理**-**C_OpenSession()**、**C_CloseSession()**、**C_GetSessionInfo()**、**C_CloseAllSessions()**、**C_Login()**和 **C_Logout()**
|
||||
|
||||
- **插槽和令牌管理**-**C_GetSlotList()**、**C_GetSlotInfo()**、**C_GetMechanismList()**、**C_GetMechanismInfo()** 和**C_SetPIN()**
|
||||
|
||||
- **加密和解密**-**C_EncryptInit()**、**C_Encrypt()**、**C_EncryptUpdate()**、**C_EncryptFinal()**、**C_DecryptInit()**、**C_Decrypt()**、**C_DecryptUpdate()**和 **C_DecryptFinal()**
|
||||
|
||||
- **消息摘要**-**C_DigestInit()**、**C_Digest()**、**C_DigestKey()**、**C_DigestUpdate()** 和**C_DigestFinal()**
|
||||
|
||||
- **MAC 的签名和应用**-**C_Sign()**、**C_SignInit()**、**C_SignUpdate()**、**C_SignFinal()**、**C_SignRecoverInit()** 和**C_SignRecover()**
|
||||
|
||||
- **签名检验**-**C_Verify()**、**C_VerifyInit()**、**C_VerifyUpdate()**、**C_VerifyFinal()**、**C_VerifyRecoverInit()**和 **C_VerifyRecover()**
|
||||
|
||||
- **双重用途加密函数**-**C_DigestEncryptUpdate()**、**C_DecryptDigestUpdate()**、**C_SignEncryptUpdate()** 和**C_DecryptVerifyUpdate()**
|
||||
|
||||
- **随机数生成**-**C_SeedRandom()** 和 **C_GenerateRandom()**
|
||||
|
||||
- **对象管理**-**C_CreateObject()**、**C_DestroyObject()**、**C_CopyObject()**、**C_FindObjects()**、**C_FindObjectsInit()**、**C_FindObjectsFinal()**、**C_GetAttributeValue()**和 **C_SetAttributeValue()**
|
||||
|
||||
- **密钥管理**-**C_GenerateKey()**、**C_GenerateKeyPair()** 和 **C_DeriveKey()**
|
||||
|
||||
|
||||
### 使用 PKCS #11 的函数
|
||||
|
||||
本节提供了以下使用 PKCS #11 的函数的说明:
|
||||
|
||||
- [PKCS #11 函数: **C_Initialize()**](http://docs.sun.com/app/docs/doc/819-7056/6n91eac56?l=zh&a=view#chapter2-9d)
|
||||
|
||||
- [PKCS #11 函数: **C_GetInfo()**](http://docs.sun.com/app/docs/doc/819-7056/6n91eac56?l=zh&a=view#chapter2-7)
|
||||
|
||||
- [PKCS #11 函数: **C_GetSlotList()**](http://docs.sun.com/app/docs/doc/819-7056/6n91eac56?l=zh&a=view#chapter2-9)
|
||||
|
||||
- [PKCS #11 函数: **C_GetTokenInfo()**](http://docs.sun.com/app/docs/doc/819-7056/6n91eac56?l=zh&a=view#chapter2-9a)
|
||||
|
||||
- [PKCS #11 函数: **C_OpenSession()**](http://docs.sun.com/app/docs/doc/819-7056/6n91eac56?l=zh&a=view#chapter2-9f)
|
||||
|
||||
- [PKCS #11 函数: **C_GetMechanismList()**](http://docs.sun.com/app/docs/doc/819-7056/6n91eac56?l=zh&a=view#chapter2-9b)
|
||||
|
||||
|
||||
---
|
||||
|
||||
注 –
|
||||
|
||||
所有的 PKCS #11 函数都可以从 libpkcs11.so 库中获取,不必使用 **C_GetFunctionList()** 函数来获取可用函数的列表。
|
||||
|
||||
---
|
||||
|
||||
#### PKCS #11 函数: **C_Initialize()**
|
||||
|
||||
**C_Initialize()** 可用于初始化 PKCS #11 库。**C_Initialize()** 使用以下语法:
|
||||
|
||||
C_Initialize(CK_VOID_PTR pInitArgs);
|
||||
|
||||
pInitArgs 是空值 NULL_PTR 或是指向 CK_C_INITIALIZE_ARGS 结构的指针。通过 NULL_PTR,该库可以将 Solaris 互斥锁用作锁定原语,在多个线程之间仲裁对内部共享结构的访问。请注意,Solaris 加密框架不接受互斥锁。由于cryptoki 库的此实现可以安全高效地处理多线程,因此建议使用 NULL_PTR。应用程序还可以使用 pInitArgs 来设置诸如 CKF_LIBRARY_CANT_CREATE_OS_THREADS 之类的标志。**C_Finalize()** 表示应用程序使用 PKCS #11 库结束会话。
|
||||
|
||||
---
|
||||
|
||||
注 –
|
||||
|
||||
**C_Finalize()** 绝不应当通过库进行调用。按照惯例,应用程序负责调用 **C_Finalize()** 来关闭会话。
|
||||
|
||||
---
|
||||
|
||||
除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,**C_Initialize()** 还会使用以下返回值:
|
||||
|
||||
- CKR_ARGUMENTS_BAD
|
||||
|
||||
- CKR_CANT_LOCK
|
||||
|
||||
- CKR_CRYPTOKI_ALREADY_INITIALIZED-此错误不是致命的。
|
||||
|
||||
|
||||
#### PKCS #11 函数: **C_GetInfo()**
|
||||
|
||||
**C_GetInfo()** 使用的是有关 cryptoki 库的制造商和版本信息。**C_GetInfo()** 使用以下语法:
|
||||
|
||||
C_GetInfo(CK_INFO_PTR pInfo);
|
||||
|
||||
**C_GetInfo()** 会返回以下值:
|
||||
|
||||
- cryptokiVersion = 2, 11
|
||||
|
||||
- manufacturerID = Sun Microsystems, Inc.
|
||||
|
||||
|
||||
除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,**C_GetInfo()** 还可以获取以下返回值:
|
||||
|
||||
- CKR_ARGUMENTS_BAD
|
||||
|
||||
- CKR_CRYPTOKI_NOT_INITIALIZED
|
||||
|
||||
|
||||
#### PKCS #11 函数: **C_GetSlotList()**
|
||||
|
||||
**C_GetSlotList()** 使用的是可用插槽的列表。如果除了 pkcs11_softtoken.so 以外尚未安装任何其他加密提供者,则 **C_GetSlotList()** 仅返回缺省插槽。**C_GetSlotList()** 使用以下语法:
|
||||
|
||||
C_GetSlotList(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList,
|
||||
|
||||
CK_ULONG_PTR pulCount);
|
||||
|
||||
如果 tokenPresent 设置为 TRUE,则会将搜索限制在那些存在令牌的插槽。
|
||||
|
||||
如果 pSlotList 设置为 NULL_PTR,则 **C_GetSlotlist()** 仅返回插槽的数量。pulCount 是指向用于接收插槽计数的位置的指针。
|
||||
|
||||
如果 pSlotList 指向用于接收插槽的缓冲区,则 *pulCount 将设置为 CK_SLOT_ID 元素的最大预期数量。在返回时,*pulCount 将设置为 CK_SLOT_ID 元素的实际数量。
|
||||
|
||||
通常,PKCS #11 应用程序会调用 **C_GetSlotList()** 两次。第一次调用 **C_GetSlotList()** 用于获取进行内存分配的插槽数量,第二次调用 **C_GetSlotList()** 用于获取插槽。
|
||||
|
||||
除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,**C_GetSlotlist()** 还可以获取以下返回值:
|
||||
|
||||
- CKR_ARGUMENTS_BAD
|
||||
|
||||
- CKR_BUFFER_TOO_SMALL
|
||||
|
||||
- CKR_CRYPTOKI_NOT_INITIALIZED
|
||||
|
||||
|
||||
#### PKCS #11 函数: **C_GetTokenInfo()**
|
||||
|
||||
**C_GetTokenInfo()** 可用于获取有关特定令牌的信息。**C_GetTokenInfo()** 使用以下语法:
|
||||
|
||||
C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo);
|
||||
|
||||
slotID 用于标识令牌的插槽。slotID 必须是由 **C_GetSlotList()** 返回的有效 ID。pInfo 是指向用于接收令牌信息的位置的指针。
|
||||
|
||||
如果 pkcs11_softtoken.so 是所安装的唯一提供者,则 **C_GetTokenInfo()** 将返回以下字段和值:
|
||||
|
||||
- 标记-Sun Software PKCS#11 软令牌。
|
||||
|
||||
- 标志-CKF_DUAL_CRYPTO_OPERATIONS、CKF_TOKEN_INITIALIZED、CKF_RNG、CKF_USER_PIN_INITIALIZED 和CKF_LOGIN_REQUIRED,这些标志设置为 1。
|
||||
|
||||
- ulMaxSessionCount-设置为 CK_EFFECTIVELY_INFINITE。
|
||||
|
||||
- ulMaxRwSessionCount-设置为 CK_EFFECTIVELY_INFINITE。
|
||||
|
||||
- ulMaxPinLen-设置为 256。
|
||||
|
||||
- ulMinPinLen-设置为 1。
|
||||
|
||||
- ulTotalPublicMemory-设置为 CK_UNAVAILABLE_INFORMATION。
|
||||
|
||||
- ulFreePublicMemory-设置为 CK_UNAVAILABLE_INFORMATION。
|
||||
|
||||
- ulTotalPrivateMemory-设置为 CK_UNAVAILABLE_INFORMATION。
|
||||
|
||||
- ulFreePrivateMemory-设置为 CK_UNAVAILABLE_INFORMATION。
|
||||
|
||||
|
||||
除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,**C_GetSlotlist()** 还可以获取以下返回值:
|
||||
|
||||
- CKR_ARGUMENTS_BAD
|
||||
|
||||
- CKR_BUFFER_TOO_SMALL
|
||||
|
||||
- CKR_CRYPTOKI_NOT_INITIALIZED
|
||||
|
||||
- CKR_SLOT_ID_INVALID
|
||||
|
||||
|
||||
以下返回值与具有硬件令牌的插件相关:
|
||||
|
||||
- CKR_DEVICE_ERROR
|
||||
|
||||
- CKR_DEVICE_MEMORY
|
||||
|
||||
- CKR_DEVICE_REMOVED
|
||||
|
||||
- CKR_TOKEN_NOT_PRESENT
|
||||
|
||||
- CKR_TOKEN_NOT_RECOGNIZED
|
||||
|
||||
|
||||
#### PKCS #11 函数: **C_OpenSession()**
|
||||
|
||||
应用程序可使用 **C_OpenSession()** 来启动特定插槽中具有特定令牌的加密会话。**C_OpenSession()** 使用以下语法:
|
||||
|
||||
C_OpenSession(CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication,
|
||||
|
||||
CK_NOTIFY Notify, CK_SESSION_HANDLE_PTR phSession);
|
||||
|
||||
slotID 用于标识插槽。flags 用于指示会话是只读的还是可读写的。pApplication 是应用程序所定义的用于回调的指针。Notify 用于存放可选回调函数的地址。phSession 是指向会话句柄的位置的指针。
|
||||
|
||||
除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,**C_OpenSession()** 还可以获取以下返回值:
|
||||
|
||||
- CKR_ARGUMENTS_BAD
|
||||
|
||||
- CKR_CRYPTOKI_NOT_INITIALIZED
|
||||
|
||||
- CKR_SLOT_ID_INVALID
|
||||
|
||||
- CKR_TOKEN_WRITE_PROTECTED-随受写保护的令牌出现。
|
||||
|
||||
|
||||
以下返回值与具有硬件令牌的插件相关:
|
||||
|
||||
- CKR_DEVICE_ERROR
|
||||
|
||||
- CKR_DEVICE_MEMORY
|
||||
|
||||
- CKR_DEVICE_REMOVED
|
||||
|
||||
- CKR_SESSION_COUNT
|
||||
|
||||
- CKR_SESSION_PARALLEL_NOT_SUPPORTED
|
||||
|
||||
- CKR_SESSION_READ_WRITE_SO_EXISTS
|
||||
|
||||
- CKR_TOKEN_NOT_PRESENT
|
||||
|
||||
- CKR_TOKEN_NOT_RECOGNIZED
|
||||
|
||||
|
||||
#### PKCS #11 函数: **C_GetMechanismList()**
|
||||
|
||||
**C_GetMechanismList()** 可用于获取指定令牌所支持的机制类型的列表。**C_GetMechanismList()** 使用以下语法:
|
||||
|
||||
C_GetMechanismList(CK_SLOT_ID slotID, CK_MECHANISM_TYPE_PTR pMechanismList,
|
||||
|
||||
CK_ULONG_PTR pulCount);
|
||||
|
||||
slotID 用于标识令牌的插槽。pulCount 是指向用于接收机制数量的位置的指针。 如果 pMechanismList 设置为 NULL_PTR,则 *pulCount 将返回机制的数量。否则,必须将 *pulCount 设置为列表的大小,pMechanismList 必须指向用于存放列表的缓冲区。
|
||||
|
||||
如果已插入 PKCS #11 软令牌,则 **C_GetMechanismList()** 将返回以下列出的支持的机制:
|
||||
|
||||
- CKM_AES_CBC
|
||||
|
||||
- CKM_AES_CBC_PAD
|
||||
|
||||
- CKM_AES_ECB
|
||||
|
||||
- CKM_AES_KEY_GEN
|
||||
|
||||
- CKM_DES_CBC
|
||||
|
||||
- CKM_DES_CBC_PAD
|
||||
|
||||
- CKM_DES_ECB
|
||||
|
||||
- CKM_DES_KEY_GEN
|
||||
|
||||
- CKM_DES_MAC
|
||||
|
||||
- CKM_DES_MAC_GENERAL
|
||||
|
||||
- CKM_DES3_CBC
|
||||
|
||||
- CKM_DES3_CBC_PAD
|
||||
|
||||
- CKM_DES3_ECB
|
||||
|
||||
- CKM_DES3_KEY_GEN
|
||||
|
||||
- CKM_DH_PKCS_DERIVE
|
||||
|
||||
- CKM_DH_PKCS_KEY_PAIR_GEN
|
||||
|
||||
- CKM_DSA
|
||||
|
||||
- CKM_DSA_KEY_PAIR_GEN
|
||||
|
||||
- CKM_DSA_SHA_1
|
||||
|
||||
- CKM_MD5
|
||||
|
||||
- CKM_MD5_KEY_DERIVATION
|
||||
|
||||
- CKM_MD5_RSA_PKCS
|
||||
|
||||
- CKM_MD5_HMAC
|
||||
|
||||
- CKM_MD5_HMAC_GENERAL
|
||||
|
||||
- CKM_PBE_SHA1_RC4_128
|
||||
|
||||
- CKM_PKCS5_PBKD2
|
||||
|
||||
- CKM_RC4
|
||||
|
||||
- CKM_RC4_KEY_GEN
|
||||
|
||||
- CKM_RSA_PKCS
|
||||
|
||||
- CKM_RSA_X_509
|
||||
|
||||
- CKM_RSA_PKCS_KEY_PAIR_GEN
|
||||
|
||||
- CKM_SHA_1
|
||||
|
||||
- CKM_SHA_1_HMAC_GENERAL
|
||||
|
||||
- CKM_SHA_1_HMAC
|
||||
|
||||
- CKM_SHA_1_KEY_DERIVATION
|
||||
|
||||
- CKM_SHA_1_RSA_PKCS
|
||||
|
||||
- CKM_SSL3_KEY_AND_MAC_DERIVE
|
||||
|
||||
- CKM_SSL3_MASTER_KEY_DERIVE
|
||||
|
||||
- CKM_SSL3_MASTER_KEY_DERIVE_DH
|
||||
|
||||
- CKM_SSL3_MD5_MAC
|
||||
|
||||
- CKM_SSL3_PRE_MASTER_KEY_GEN
|
||||
|
||||
- CKM_SSL3_SHA1_MAC
|
||||
|
||||
- CKM_TLS_KEY_AND_MAC_DERIVE
|
||||
|
||||
- CKM_TLS_MASTER_KEY_DERIVE
|
||||
|
||||
- CKM_TLS_MASTER_KEY_DERIVE_DH
|
||||
|
||||
- CKM_TLS_PRE_MASTER_KEY_GEN
|
||||
|
||||
|
||||
除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,**C_GetSlotlist()** 还使用以下返回值:
|
||||
|
||||
- CKR_ARGUMENTS_BAD
|
||||
|
||||
- CKR_BUFFER_TOO_SMALL
|
||||
|
||||
- CKR_CRYPTOKI_NOT_INITIALIZED
|
||||
|
||||
- CKR_SLOT_ID_INVALID
|
||||
|
||||
|
||||
以下返回值与具有硬件令牌的插件相关:
|
||||
|
||||
- CKR_DEVICE_ERROR
|
||||
|
||||
- CKR_DEVICE_MEMORY
|
||||
|
||||
- CKR_DEVICE_REMOVED
|
||||
|
||||
- CKR_TOKEN_NOT_PRESENT
|
||||
|
||||
- CKR_TOKEN_NOT_RECOGNIZED
|
||||
|
||||
|
||||
### 扩展的 PKCS #11 函数
|
||||
|
||||
除了标准的 PKCS #11 函数以外,Solaris 加密框架还附带了两个便利函数:
|
||||
|
||||
- [扩展的 PKCS #11 函数: **SUNW_C_GetMechSession()**](http://docs.sun.com/app/docs/doc/819-7056/6n91eac56?l=zh&a=view#efuser-5)
|
||||
|
||||
- [扩展的 PKCS #11 函数: SUNW_C_KeyToObject](http://docs.sun.com/app/docs/doc/819-7056/6n91eac56?l=zh&a=view#efuser-6)
|
||||
|
||||
|
||||
#### 扩展的 PKCS #11 函数: **SUNW_C_GetMechSession()**
|
||||
|
||||
**SUNW_C_GetMechSession()** 是一个便利函数,用于初始化 Solaris 加密框架。该函数随后会使用指定的机制启动会话。**SUNW_C_GetMechSession()** 使用以下语法:
|
||||
|
||||
SUNW_C_GetMechSession(CK_MECHANISM_TYPE mech, C/
|
||||
|
||||
K_SESSION_HANDLE_PTR hSession)
|
||||
|
||||
mech 参数用于指定要使用的机制。hSession 是指向会话位置的指针。
|
||||
|
||||
**SUNW_C_GetMechSession()** 在内部调用 **C_Initialize()** 以初始化 cryptoki库。**SUNW_C_GetMechSession()** 接着会使用指定的机制调用 **C_GetSlotList()** 和**C_GetMechanismInfo()**,在可用插槽中搜索令牌。如果找到了机制,**SUNW_C_GetMechSession()** 会调用**C_OpenSession()** 来打开会话。
|
||||
|
||||
**SUNW_C_GetMechSession()** 只需要调用一次。不过,多次调用 **SUNW_C_GetMechSession()** 也不会造成任何问题。
|
||||
|
||||
#### 扩展的 PKCS #11 函数: SUNW_C_KeyToObject
|
||||
|
||||
**SUNW_C_KeyToObject()** 可用于创建私钥对象。调用程序必须指定要使用的机制以及原始密钥数据。**SUNW_C_KeyToObject()** 可在内部确定指定机制的密钥类型。通用密钥对象是通过 **C_CreateObject()** 创建的。**SUNW_C_KeyToObject()** 接着会调用 **C_GetSessionInfo()** 和 **C_GetMechanismInfo()** 来获取插槽和机制。**C_SetAttributeValue()** 随后会根据机制的类型为密钥对象设置属性标志。
|
||||
@@ -0,0 +1,8 @@
|
||||
![[Pasted image 20241101143547.png]]
|
||||
|
||||
![[Pasted image 20241101145625.png]]
|
||||
|
||||
|
||||
|
||||
|
||||
`resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv`
|
||||
@@ -0,0 +1,108 @@
|
||||
当初安装zabbix时,想着划分50G空间就足够使用了,没想到才一个星期不到根目录就100%沾满了,导致zabbix前端页面无法访问,主要是日志文件太大了,一个日志文件就4~5G,想着就给Ubuntu扩容下
|
||||
|
||||
1、vm添加新硬盘,由于我虚拟就中“扩展磁盘容量”是灰色的,所以无法直接进行扩展
|
||||
|
||||

|
||||
|
||||
2、添加硬盘
|
||||
|
||||

|
||||
|
||||
3、硬盘类型“SCSI”
|
||||
|
||||

|
||||
|
||||
4、创建新的磁盘文件
|
||||
|
||||

|
||||
|
||||
5、分配 500G
|
||||
|
||||

|
||||
|
||||
6、硬盘添加完成
|
||||
|
||||

|
||||
|
||||
7、根目录没扩容之前的空间,只有24G
|
||||
|
||||

|
||||
|
||||
8、使用 lsblk 查看新硬盘是否被系统识别,如果没有识别请重启虚拟机
|
||||
|
||||

|
||||
|
||||
9、对新添加的硬盘进行分区 fdisk /dev/sdb
|
||||
|
||||

|
||||
|
||||
在 command 输入 m 进行帮助
|
||||
|
||||

|
||||
|
||||
- n 增加一个新分区
|
||||
- e 扩展分区
|
||||
- p 主分区
|
||||
- 1-4 所增加主分区的数量
|
||||
- 卷的起始位置
|
||||
- 卷的结束位置
|
||||
- w 将分区表写入磁盘并退出
|
||||
|
||||
第四步、第五步都直接回车确定
|
||||
|
||||

|
||||
|
||||
10、检查分区,可以看到 sdb1 是刚创建的新分区
|
||||
|
||||

|
||||
|
||||
11、对新分区进行格式化前,先看下之前根目录分区格式,这里是 ext4 分区格式
|
||||
|
||||

|
||||
|
||||
12、命令 sudo mkfs.ext4 /dev/sdb1 ,进行分区
|
||||
|
||||

|
||||
|
||||
13、将硬盘分区初始化为物理卷
|
||||
|
||||

|
||||
|
||||
14、查看物理卷,可以看到第二个分区就是我们新创建的物理卷
|
||||
|
||||

|
||||
|
||||
15、vgextend 命令将物理卷添加到根目录所在的卷组
|
||||
|
||||
sudo vgextend ubuntu-vg /dev/sdb1
|
||||
|
||||
ubuntu-vg #根目录所在的组名
|
||||
/dev/sdb1 #新磁盘分区名
|
||||
|
||||

|
||||
|
||||
16、根目录逻辑卷扩容
|
||||
|
||||
sudo lvextend -L +500G /dev/mapper/ubuntu--vg-ubuntu--lv
|
||||
|
||||
-L #指定扩容分区大小
|
||||
|
||||

|
||||
|
||||
17、更新逻辑卷同步至文件系统
|
||||
|
||||
xfs文件系统格式用:
|
||||
|
||||
xfs_growfs /dev/mapper/ubuntu--vg-ubuntu--lv
|
||||
|
||||
其它文件系统格式:
|
||||
|
||||
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
|
||||
|
||||

|
||||
|
||||
18、升级完成,sudo df -Th 查看分区情况
|
||||
|
||||

|
||||
|
||||
分类: [9,Linux学习](https://www.cnblogs.com/xiykj/category/1783489.html)
|
||||
@@ -0,0 +1,147 @@
|
||||
ab是apache自带的一种压力测试工具。ab可以直接在Web服务器本地发起测试请求,这至关重要,因为有些时候我们需要测试的仅仅是服务器的 处理性能,并不想掺杂着网络传输时间的影响。ab进行一切测试的本质都是基于HTTP的,所以可以说ab对于Web服务器软件的黑盒性能测试,获得的一切 数据和计算结果,都是可以通过HTTP来解释的。
|
||||
|
||||
|
||||
|
||||
```Plain Text
|
||||
一、ab命令参数详解
|
||||
```
|
||||
|
||||
- **-n requests Number of requests to perform**
|
||||
# 在测试会话中所执行的请求个数。 默认时,仅执行一个请求,但通常其结果不具有代表意义。
|
||||
|
||||
- **-c concurrency Number of multiple requests to make**
|
||||
# 在测试会话中所执行的请求并发数
|
||||
|
||||
- **-t timelimit Seconds to max. wait for responses**
|
||||
# 测试所进行的最大秒数。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
|
||||
|
||||
- **-b windowsize Size of TCP send/receive buffer, in bytes**
|
||||
# TCP发送/接收的缓冲大小(单位:字节)
|
||||
|
||||
- **-p postfile File containing data to POST. Remember also to set -T**
|
||||
# 发送POST请求时需要上传的文件,此外还必须设置-T参数
|
||||
|
||||
- **-u putfile File containing data to PUT. Remember also to set -T**
|
||||
# 发送PUT请求时需要上传的文件,此外还必须设置-T参数
|
||||
|
||||
- **-T content-type Content-type header for POSTing, eg.
|
||||
‘application/x-www-form-urlencoded’
|
||||
Default is ‘text/plain’**
|
||||
# 用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。
|
||||
|
||||
- **-v verbosity How much troubleshooting info to print**
|
||||
# 指定打印帮助信息的冗余级别
|
||||
|
||||
- **-w Print out results in HTML tables**
|
||||
# 以HTML表格形式打印结果
|
||||
|
||||
- **-i Use HEAD instead of GET**
|
||||
# 使用HEAD请求代替GET请求
|
||||
|
||||
- **-x attributes String to insert as table attributes**
|
||||
# 插入字符串作为table标签的属性
|
||||
|
||||
- **-y attributes String to insert as tr attributes**
|
||||
# 插入字符串作为tr标签的属性
|
||||
|
||||
- **-z attributes String to insert as td or th attributes**
|
||||
# 插入字符串作为td标签的属性
|
||||
|
||||
- **-C attribute Add cookie, eg. ‘Apache=1234. (repeatable)**
|
||||
# 添加cookie信息,例如:”Apache=1234″(可以重复该参数选项以添加多个)
|
||||
|
||||
- **-H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’
|
||||
Inserted after all normal header lines. (repeatable)**
|
||||
# 添加任意的请求头,例如:”Accept-Encoding: gzip”,请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。
|
||||
|
||||
- **-A attribute Add Basic WWW Authentication, the attributes
|
||||
are a colon separated username and password.**
|
||||
# 添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开
|
||||
|
||||
- **-P attribute Add Basic Proxy Authentication, the attributes
|
||||
are a colon separated username and password.**
|
||||
# 添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。
|
||||
|
||||
- **-X proxy:port Proxyserver and port number to use**
|
||||
# 指定使用的代理服务器和端口号,例如:”126.10.10.3:88″。
|
||||
|
||||
- **-V Print version number and exit**
|
||||
# 打印版本号并退出。
|
||||
|
||||
- **-k Use HTTP KeepAlive feature**
|
||||
# 使用HTTP的KeepAlive特性
|
||||
|
||||
- **-d Do not show percentiles served table.**
|
||||
# 不显示百分比。
|
||||
|
||||
- **-S Do not show confidence estimators and warnings.**
|
||||
# 不显示预估和警告信息。
|
||||
|
||||
- **-g filename Output collected data to gnuplot format file.**
|
||||
# 输出结果信息到gnuplot格式的文件中。
|
||||
|
||||
- **-e filename Output CSV file with percentages served**
|
||||
# 输出结果信息到CSV格式的文件中。
|
||||
|
||||
- **-r Don’t exit on socket receive errors.**
|
||||
# 指定接收到错误信息时不退出程序。
|
||||
|
||||
- **-h Display usage information (this message)**
|
||||
# 显示用法信息,其实就是ab -help
|
||||
|
||||
- **-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
|
||||
-f protocol Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL)**
|
||||
# 使用ssl/tls的协议版本
|
||||
|
||||
```Plain Text
|
||||
二、测试性能输出详解
|
||||
```
|
||||
|
||||
- Server Software: Apache/2.2.15
|
||||
Server Hostname: 192.168.80.135
|
||||
Server Port: 80
|
||||
Document Path: /phpinfo.php
|
||||
Document Length: 50366 bytes
|
||||
|
||||
- Concurrency Level: 100
|
||||
# 表示并发的用户数
|
||||
|
||||
- **Time taken for tests: 0.739 seconds
|
||||
# 表示所有这些请求被处理完成所花费的总时间**
|
||||
|
||||
- Complete requests: 1000
|
||||
# 表示总请求数量,这是我们设置的参数之一
|
||||
|
||||
- Failed requests: 0
|
||||
# 表示失败的请求数量,这里的失败是指请求在连接服务器、发送数据等环节发生异常,以及无响应后超时的情况。如果接收到的HTTP响应数据的头信息中含有 2XX以外的状态码,则会在测试结果中显示另一个名为 “Non-2xx responses”的统计项,用于统计这部分请求数,这些请求并不算在失败的请求中。
|
||||
|
||||
- Write errors: 0
|
||||
Keep-Alive requests: 0
|
||||
|
||||
- **Total transferred: 50538000 bytes
|
||||
# 表示所有请求的响应数据长度总和,包括每个HTTP响应数据的头信息和正文数据的长度。注意这里不包括HTTP请求数据的长度,仅仅为web服务器流向用户PC的应用层数据总长度。**
|
||||
|
||||
- **HTML transferred: 50366000 bytes
|
||||
# 表示所有请求的响应数据中正文数据的总和,也就是减去了Total transferred中HTTP响应数据中的头信息的长度**
|
||||
|
||||
- **Requests per second: 1353.17 [#/sec] (mean)
|
||||
# 吞吐率,计算公式:Complete requests / Time taken for tests**
|
||||
|
||||
- **Time per request: 73.901 [ms] (mean)
|
||||
# 用户平均请求等待时间,计算公式:Time token for tests/(Complete requests/Concurrency Level)
|
||||
【注】这里是请求等待时间,不是使用计算公式:Time taken for tests / Concurrency Level**
|
||||
|
||||
- **Time per request: 0.739 [ms] (mean, across all concurrent requests)
|
||||
# 服务器平均请求等待时间,计算公式:Time taken for tests/Complete requests,正好是吞吐率的倒数。也可以这么统计:Time per request/Concurrency Level**
|
||||
|
||||
- **Transfer rate: 66783.56 [Kbytes/sec] received
|
||||
# 表示这些请求在单位时间内从服务器获取的数据长度,计算公式:Total trnasferred/ Timetaken for tests,这个统计很好的说明服务器的处理能力达到极限时,其出口宽带的需求量。**
|
||||
|
||||
```Plain Text
|
||||
Connection Times (ms)
|
||||
min avg max
|
||||
Connect: 0 5 13
|
||||
Processing: 12 66 98
|
||||
Total:
|
||||
```
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
先给出crontab的语法格式
|
||||
|
||||

|
||||
|
||||
对于网上很多给出的每小时定时任务写法,可以说绝大多数都是错误的!比如对于下面的这种写法:
|
||||
|
||||
```Plain Text
|
||||
00 * * * * #每隔一小时执行一次
|
||||
00 */1 * * * #与上面是相同的任务
|
||||
```
|
||||
|
||||
这种是正确的吗?对照最前面给出的语法格式来看,这个定时任务在0分、每小时、每天、每月、每星期执行,看起来似乎很合理啊?前一个小时的0分和后一个小时的0分不就是相隔一个小时吗?这样的话不就是每隔一个小时执行吗?再仔细看看,好像有点不对劲,为什么是每小时的0分?如果我在11:55创建了定时任务,希望每小时执行一次,那么接下来这个定时任务是在12:55执行,还是在12:00执行?很显然,它是每小时的0分执行,也就是在12:00执行。
|
||||
|
||||
似乎没区别?那么请思考下,每隔3小时执行如何写?
|
||||
|
||||
网上给出的写法如下:
|
||||
|
||||
```Plain Text
|
||||
0 */3 * * * #错误的每隔3小时执行一次写法
|
||||
```
|
||||
|
||||
这种也是错误的写法,这种能充分展示前面一小时执行一次带来的迷惑感,这种写法其实是每整3小时的0分执行一次。也就是说,它会在每天的3点、9点、12点...等3的整数倍时间点来执行,并不是真正意义上每隔3个小时执行,如同前面类似,如果你在11:56创建这种每3小时的定时任务,那么它会在12点就开始执行,而不是14:56执行。请看如下验证:
|
||||
|
||||
11:56分创建上面所谓的“每3小时执行一次”的定时任务:
|
||||
|
||||

|
||||
|
||||
4分钟后而不是3小时后,crontab执行了该定时任务:
|
||||
|
||||

|
||||
|
||||
事实上,对于这种 "0 */3 * * * " 这种分钟时间点固定,小时按每小时或者每3小时的写法,都是从1点开始算倍数,比如每一小时就是1点、2点、3点,而每2小时就是2点、4点、6点,每3小时就是3点、6点、9点等等,以此类推。
|
||||
|
||||
除此之外,网上还有人给出这种的每小时执行一次的定时任务写法:
|
||||
|
||||
```Plain Text
|
||||
* */1 * * * #错误的每隔一小时执行一次,事实上每分钟执行一次
|
||||
```
|
||||
|
||||
这种比前面那种还不如,它压根不是每小时执行,而是每分钟执行!为什么?因为分钟要求的是每分钟执行,而小时却要求每一个小时执行,这2个分明是冲突的时间策略。最终以分钟为准,所以它是每分钟执行一次。
|
||||
|
||||
`真正的每隔一小时、每隔105分钟执行的定时任务应该如何写呢?如下:`
|
||||
|
||||
```Plain Text
|
||||
*/60 * * * * #每60分钟即每小时执行一次
|
||||
*/105 * * * * #每105分钟执行一次
|
||||
```
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
## 注意
|
||||
git 自动转换回车会导致动态库错误。执行命令关闭自动转换。
|
||||
```
|
||||
git config --global core.autocrlf false
|
||||
```
|
||||
@@ -0,0 +1,97 @@
|
||||
# 序
|
||||
|
||||
我比较熟练bat、cmd脚本。刚接触使用shell时,总会习惯想用windows窗口界面来套用shell脚本。于是找到screen后台命令,它可以交互shell脚本,保持后台运行。但是在批处理batch、cmd环境下,使用start 可以调用弹出其它cmd脚本。在使用screen命令弹出新会话后,总是需要手动按键断开会话。此文章特意为解决这个问而提出解决办法和实验过程与结果,即使用脚本或命令自动调用后台命令或后台脚本,无需系统等待或人工干预。供大家学习和参考。欢迎讨论。顺带吐槽的是,这个需求或解决办法,几乎很少很难在搜索引擎结果中有效出现,所以我将它写下发布出来,供大家学习和自己使用。
|
||||
|
||||
# 参考文章
|
||||
|
||||
ssh远程执行脚本并在后台运行,通过screen解决 http://blog.uouo123.com/post/823.html
|
||||
|
||||
文章出现重要线索:screen -x -S $screen_name -p 0 -X stuff "$cmd"
|
||||
|
||||
shell嵌套expect执行screen命令 https://blog.csdn.net/xbw12138/article/details/79271575
|
||||
|
||||
文章展示出部分shell代码,加入了expect命令。同样出现重要线索:screen -x -S $screen_name -p 0 -X stuff "$cmd"
|
||||
|
||||
我个人认为没必要介入expect命令,多此一举
|
||||
|
||||
其它文章
|
||||
|
||||
文中出现线索:bash -c 'ping www.baidu.com';
|
||||
|
||||
# 后台调用命令
|
||||
|
||||
使用环境为:centos 6.1 已安装screen命令。一切后台调用过程,尽可能绕开手动断开会话过程,所以经掉查发现,使用 -dmS参数开启一个已断开的会话,可以绕过手动断开操作。一般在开启会话同时调用命令的写法是:screen ping www.baidu.com 但是套用在这里时没有结果:screen -dmS test ping www.baidu.com。使用screen -ls 检查时,不是没有创建出后台会话,就是进入会话是黑屏。即,没有命令被执行。所以经测试查找。配合使用bash -c参数,才可以在后台调用命令。完整命令如下:
|
||||
|
||||
```Plain Text
|
||||
screen -dmS test bash -c 'ping www.baidu.com';
|
||||
```
|
||||
|
||||
其中 -dmS test 指 后台静默创建名称为 test 的会话,会话名比较重要。
|
||||
|
||||
bash -c 'ping www.baidu.com' 指 会话中 执行 ping www.baidu.com 命令
|
||||
|
||||
## 解释
|
||||
|
||||
一般的shell命令,执行完就结束了。脚本调用命令岂不是多此一举?
|
||||
|
||||
答:举例中的ping命令在没有参数情况下会一直ping下去。如果放在脚本中执行,应当是会一直执行下去,导致后续命令暂停。且一般的命令通过这个方式调用时,会话将伴随着命令的结束而自动销毁。已通过测试证实。
|
||||
|
||||
测试代码:
|
||||
|
||||
```Plain Text
|
||||
screen -dmS mv;
|
||||
screen -dmS test bash -c 'service crond stop';
|
||||
screen -ls;
|
||||
```
|
||||
|
||||
执行完毕后,应当只出现1个名称为mv的会话
|
||||
|
||||
# 后台调用脚本
|
||||
|
||||
使用环境为:centos 6.1 已安装screen命令。将命令模式下的命令内容,无论怎样替换,始终无法执行。包括不限于这些举例./a.sh 、sh a.sh 所以经过参考文章发现重要线索:screen -x -S $screen_name -p 0 -X stuff "$cmd" 。原理应当是发送命令至指定会话中执行,所以前期创建会话时,应指定会话名。参数 -S 指定会话 参数 -X 发送命令 参数 stuff ?疑似?是输出命令执行 参数 -p 指定屏幕。-x 连接断开会话。经测试发现,不需要使用 参数 -x 。参数-p 0 指定屏幕 0是必须参数。
|
||||
|
||||
测试代码:
|
||||
|
||||
```Plain Text
|
||||
screen -dmS test;
|
||||
screen -dmS mv;
|
||||
screen -S test -p 0 -X stuff "sh /0/sh/init.sh";
|
||||
screen -S test -p 0 -X stuff $'\n';
|
||||
screen -ls;
|
||||
```
|
||||
|
||||
执行完毕后,应当只出现1个名称为mv的会话
|
||||
|
||||
```Plain Text
|
||||
screen -S test -p 0 -X stuff $'\n'; 是用于执行命令“回车”的操作。否则脚本不执行。
|
||||
```
|
||||
|
||||
测试中,应该保证脚本会始终执行,不结束。所以sh /0/sh/init.sh 是一段暂停并有提示内容的脚本。还原会话后,能看到暂停提示。
|
||||
|
||||
暂停测试脚本内容参看:https://www.cnblogs.com/date/p/10497018.html
|
||||
|
||||
## 返工
|
||||
|
||||
次日重新使用后台调用脚本命令时,发现失败。后排查测试发现,在第一次成功时,客户端等待时间做了设置。后期未做设置以至于失败,失败原因位置。更正后方法如下,已经过本地测试
|
||||
|
||||
```Plain Text
|
||||
screen -dmS test;
|
||||
screen -S test -p 0 -X stuff $'stty -icanon min 0 time 30 \n\n';
|
||||
screen -S test -p 0 -X stuff $'\n';
|
||||
screen -S test -p 0 -X stuff $'bash /0/sh/init.sh\n';
|
||||
screen -ls;
|
||||
```
|
||||
|
||||
静默销毁后台命令
|
||||
|
||||
```Plain Text
|
||||
screen -ls;
|
||||
screen -S test -p 0 -X stuff "exit";
|
||||
screen -S test -p 0 -X stuff $'\n';
|
||||
screen -ls
|
||||
```
|
||||
|
||||
# 结束
|
||||
|
||||
以上内容为shell脚本通过screen命令,静默后台调用命令或脚本,仿Windows、CMD的start命令,伪窗口界面的方法与说明。欢迎大家学习阅读与讨论指正。
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
|
||||
# 1使用场景
|
||||
|
||||
检测网络应用程序的网络性能。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多快的速度接收数据。测试网络性能的五项指标:可用性(availability,ping测试网络是否联通)、响应时间(response time,与未安装网络程序对比响应时间)、网络利用率(network utilization,网络被使用的时间占总时间(使用的时间+空闲的时间)的比例)、网络吞吐量(network throughput,应用程序需要的剩余带宽)、网络带宽容量(network bandwidth capacity,两节点间的最大带宽)。
|
||||
|
||||
# 2工作原理
|
||||
|
||||
Netperf工具以 client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试。在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果;在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,进行来回传递特殊的流量模式,以测试网络的性能。
|
||||
|
||||
# 3举例使用
|
||||
|
||||
## #环境描述
|
||||
|
||||
准备两个虚拟机都安装上netperf,虚拟机A作为服务器端开启某端口,虚拟机B作为客户端发包去连接A的服务,测试虚拟机A的网络性能。
|
||||
|
||||
## #安装
|
||||
|
||||
yum -y install netperf
|
||||
|
||||
## #server端
|
||||
|
||||
若不指定端口默认开启12865端口
|
||||
|
||||
netserver -4 -L 0.0.0.0 -p 8848
|
||||
|
||||

|
||||
|
||||
参数:
|
||||
|
||||
Usage: netserver [options]
|
||||
|
||||
Options:
|
||||
|
||||
-h Display this text
|
||||
|
||||
-D Do not daemonize
|
||||
|
||||
-d Increase debugging output
|
||||
|
||||
-f Do not spawn chilren for each test, run serially
|
||||
|
||||
-L name,family Use name to pick listen address and family for family
|
||||
|
||||
-N No debugging output, even if netperf asks
|
||||
|
||||
-p portnum Listen for connect requests on portnum.
|
||||
|
||||
-4 Do IPv4
|
||||
|
||||
-6 Do IPv6
|
||||
|
||||
-v verbosity Specify the verbosity level
|
||||
|
||||
-V Display version information and exit
|
||||
|
||||
-Z passphrase Expect passphrase as the first thing received
|
||||
|
||||
## #client端
|
||||
|
||||
netperf -H 172.16.18.4 -p 8848 -l 30
|
||||
netperf -H 172.16.18.4 -p 8848 -l 30 -t TCP_RR -- -r 1k,1k
|
||||
netperf -H 10.1.13.115 -p 9991 -l 30 -t TCP_CRR -- -r 4k,4k
|
||||
|
||||

|
||||
|
||||
参数:
|
||||
|
||||
netperf的命令行参数可以分为两大类:全局命令行参数、测试相关的局部参数,两者之间使用--分隔。
|
||||
|
||||
netperf语法格式为:
|
||||
Netperf [global options] --[test-specific options]
|
||||
|
||||
[global options] 可选参数,其中可选的参数有如下几个:
|
||||
|
||||
|**参数**|**说明**|
|
||||
|---|---|
|
||||
|-H host|指定远端运行netserver的server IP地址|
|
||||
|-l testlen|指定测试的时间长度(秒)|
|
||||
|-t testname|指定进行的测试类型(TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR)|
|
||||
|
||||
[test-specific options] 可选参数,其中可选的参数有如下几个:
|
||||
|
||||
|**参数**|**说明**|
|
||||
|---|---|
|
||||
|-s size|设置本地系统的socket发送与接收缓冲大小|
|
||||
|-S size|设置远端系统的socket发送与接收缓冲大小|
|
||||
|-m size|设置本地系统发送测试分组的大小|
|
||||
|-M size|设置远端系统接收测试分组的大小|
|
||||
|-D|对本地与远端系统的socket设置TCP_NODELAY选项|
|
||||
|-r req,resp|设置request和reponse分组的大小|
|
||||
|
||||
# 4FAQ
|
||||
|
||||
## 4.1客户端connect failed出现No route to host
|
||||
|
||||
两台服务器间能ping通,也开通了服务端端口,但客户端connect返回netperf:send_omni:connect_data_socket failed:No route to host。
|
||||
|
||||

|
||||
|
||||
方法一:是防火墙的问题,需停止防火墙service firewalld stop。
|
||||
|
||||
方法二:server端firewall除了开启9991,外还需要开启tcp/40000-65535。
|
||||
|
||||
netperf的client连接server端口后,server端会随机启动一个一万以上的端口用于数据传输(暂不明确server端随机启用的是几万以上端口,本地测试时显示的是40000以上端口),若server端开启firewall也需要开启tcp/40000-65535,也可将范围扩大一些tcp/10000-65535。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
**1. TCP STREAM**
|
||||
1) 远端系统(即server)使用大小为87380字节的socket接收缓冲
|
||||
2) 本地系统(即client)使用大小为16384字节的socket发送缓冲
|
||||
3) 向远端系统发送的测试分组大小为16384字节
|
||||
4) 测试经历的时间为60.03秒
|
||||
5) 吞吐量的测试结果为941.47Mbits/秒
|
||||
|
||||
**2. UDP_STREAM**
|
||||
UDP_STREAM方式的结果中有两行测试数据,第一行显示的是本地系统的发送统计,这里的吞吐量表示netperf向本地socket发送分组的能力。第二行显示的就是远端系统接收的情况。
|
||||
|
||||
**3. TCP_RR**
|
||||
TCP_R[R方](https://so.csdn.net/so/search?q=R%E6%96%B9&spm=1001.2101.3001.7020)式的测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。数据库的client程序与server程序建立一个TCP连接以后,就在这个连接中传送数据库的多次交易过程。
|
||||
Netperf输出的结果也是由两行组成。第一行显示本地系统的情况,第二行显示的是远端系统的信息。平均的交易率(transaction rate)为3094.64次/秒。注意到这里每次交易中的request和response分组的大小都为1个字节,不具有很大的实际意义。用户可以通过测试相关的参数来改变request和response分组的大小,TCP_RR方式下的参数如下表所示:
|
||||
参数说明:
|
||||
-r req,resp 设置request和reponse分组的大小
|
||||
-s size 设置本地系统的socket发送与接收缓冲大小
|
||||
-S size 设置远端系统的socket发送与接收缓冲大小
|
||||
-D 对本地与远端系统的socket设置TCP_NODELAY选项
|
||||
|
||||
**4. UDP_RR**
|
||||
UDP_RR方式使用UDP分组进行request/response的交易过程。没有TCP连接所带来的负担。
|
||||
可能会受到网络中路由器或其它的网络设备对UDP采用了与TCP不同的缓冲区空间和处理技术影响,正常情况下会高于TCP_RR的值。本次测试结果为3136.53次/秒。
|
||||
|
||||
**5. TCP_CRR**
|
||||
与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP,每次HTTP交易是在一条单独的TCP连接中进行的。因此,由于需要不停地建立新的TCP连接,并且在交易结束后拆除TCP连接,交易率一定会受到很大的影响。
|
||||
|
||||
这里交易率明显的降低了,只有1422.23次/秒。
|
||||
@@ -0,0 +1,7 @@
|
||||
py-spy 模块安装
|
||||
|
||||
|
||||
执行命令:
|
||||
py-spy record -o output.svg --native -- python test.py 3 6 -1 -1
|
||||
|
||||
得到一个 output.svg 的图
|
||||
@@ -0,0 +1,103 @@
|
||||
|
||||
|
||||
tar -cvf test.tar test #仅打包,不压缩
|
||||
tar -zcvf test.tar.gz test #打包后,以gzip压缩 在参数f后面的压缩文件名是自己取的,习惯上用tar来做,如果加z参数,则以tar.gz 或tgz来代表gzip压缩过的tar file文件
|
||||
tar -zcvf dist.tar.gz -C dist . #注意最后有一点,通过 -C 参数指定目录,可以去掉打包内容包含相对目录,打包内容只包含 dist/* 下的文件内容,不包含 dist 目录
|
||||
1
|
||||
2
|
||||
3
|
||||
解压操作:
|
||||
|
||||
tar -zxvf /usr/local/test.tar.gz
|
||||
1
|
||||
tar 解压缩命令详解
|
||||
|
||||
-c: 建立压缩档案
|
||||
-x:解压
|
||||
-t:查看内容
|
||||
-r:向压缩归档文件末尾追加文件
|
||||
-u:更新原压缩包中的文件
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
|
||||
|
||||
-z:有gzip属性的
|
||||
-j:有bz2属性的
|
||||
-J:具有xz属性的
|
||||
-Z:有compress属性的
|
||||
-v:显示所有过程
|
||||
-O:将文件解开到标准输出
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
下面的参数-f是必须的
|
||||
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
|
||||
|
||||
tar -cf all.tar *.jpg
|
||||
|
||||
tar -rf all.tar *.gif
|
||||
1
|
||||
2
|
||||
3
|
||||
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
|
||||
|
||||
tar -uf all.tar logo.gif
|
||||
1
|
||||
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
|
||||
|
||||
tar -tf all.tar
|
||||
1
|
||||
这条命令是列出all.tar包中所有文件,-t是列出文件的意思
|
||||
|
||||
tar -xf all.tar
|
||||
1
|
||||
这条命令是解出all.tar包中所有文件,-x是解开的意思
|
||||
|
||||
压缩
|
||||
|
||||
tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
|
||||
tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
|
||||
tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
|
||||
tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
|
||||
rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
|
||||
zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
解压
|
||||
|
||||
tar –xvf file.tar //解压 tar包
|
||||
tar -xzvf file.tar.gz //解压tar.gz
|
||||
tar -xjvf file.tar.bz2 //解压 tar.bz2
|
||||
tar –xZvf file.tar.Z //解压tar.Z
|
||||
unrar e file.rar //解压rar
|
||||
unzip file.zip //解压zip
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
总结
|
||||
|
||||
(1) *.tar 用 tar –xvf 解压
|
||||
(2) *.gz 用 gzip -d或者gunzip 解压
|
||||
(3) *.tar.gz和*.tgz 用 tar –xzf 解压
|
||||
(4) *.bz2 用 bzip2 -d或者用bunzip2 解压
|
||||
(5) *.tar.bz2用tar –xjf 解压
|
||||
(6) *.Z 用 uncompress 解压
|
||||
(7) *.tar.Z 用tar –xZf 解压
|
||||
(8) *.rar 用 unrar e解压
|
||||
(9) *.zip 用 unzip 解压
|
||||
(10) *.xz 用 xz -d 解压
|
||||
(11) *.tar.xz 用 tar -zJf 解压
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
|
||||
[https://faq.uniontech.com/desktop/app/45ee](https://faq.uniontech.com/desktop/app/45ee)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
apt install x11vnc -y
|
||||
|
||||
密码默认保存在**/home/<USERNAME>/.vnc/passwd**文件中
|
||||
|
||||
|
||||
|
||||
x11vnc -forever -shared -rfbauth ~/.vnc/passwd
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
|
||||
https://developer.mozilla.org/zh-CN/docs/WebAssembly
|
||||
|
||||
|
||||
|
||||
查看导出表:
|
||||
wasm-objdump -j Export -x coalg.wasm
|
||||
@@ -0,0 +1,681 @@
|
||||
## 网卡的7种bond模式
|
||||
|
||||
### 一、bond模式
|
||||
|
||||
Mode=0(balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合
|
||||
|
||||
Mode=1(active-backup) 表示主备模式,只有一块网卡是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块网卡发包,有一半包是丢弃的
|
||||
|
||||
Mode=2(balance-[xor](https://so.csdn.net/so/search?q=xor&spm=1001.2101.3001.7020)) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy)
|
||||
|
||||
Mode=3([broadcast](https://so.csdn.net/so/search?q=broadcast&spm=1001.2101.3001.7020)) 表示所有包从所有interface发出,这个不均衡,只有冗余机制…和交换机的聚合强制不协商方式配合
|
||||
|
||||
Mode=4(802.3ad) 表示支持802.3ad协议,和交换机的聚合[LACP](https://so.csdn.net/so/search?q=LACP&spm=1001.2101.3001.7020)方式配合(需要xmit_hash_policy)
|
||||
|
||||
Mode=5(balance-tlb) 是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave
|
||||
|
||||
Mode=6(balance-alb) 在5的tlb基础上增加了rlb
|
||||
|
||||
|模式|策略|特点|负载均衡|交换机配置|
|
||||
|-|-|-|-|-|
|
||||
|bond0|(balance-rr)Round-robin policy 平衡轮询策略|依次传输(即:第一次包走eth0,下一个包走eth1…一直循环下去,直到最后一个传输完毕)|是|静态聚合|
|
||||
|bond1|(active-backup)Active-backup policy 主-备份策略|只有一个端口处于活动状态,当一个宕掉后另一个马上状态由备变为主,mac地址唯一|否|否|
|
||||
|bond2|(Banlance-xor)XOR policy 平衡策略|基于指定的HASH策略传输数据包|是|静态聚合|
|
||||
|bond3|(broadcast)broadcast 广播策略|每个slave接口上传输每个数据包|否|静态聚合|
|
||||
|bond4|(802.3ad)IEEE 802.3ad Dynamic link aggregation (IEEE 802.3ad 动态链接聚合)|创建一个聚合组,他们共享相同的速率和双工设定,根据802.3ad规范将多个slave工作在同一个激活的聚合体下|是|支持IEEE 802.3ad动态聚合|
|
||||
|bond5|(balance-tlb)Adaptive transmit load balancing 适配器传输负载均衡|根据每个slave的负责情况选择salve进行发送,接收时使用当前轮到的slave|是|否|
|
||||
|bond6|(balance-alb)Adaptive load balancing 适配器适应性负载均衡|先把eth0流量占满,再占eth1…ethX。该模式包含了balance-tlb模式,同时加上针对IPV4流量的接受负载均衡(reveive load balance rlb)|是|否|
|
||||
|
||||
### 二、交换机设置
|
||||
|
||||
mode 1、5、6不需要交换机设置
|
||||
mode 0、2、3需要交换机设置静态聚合,mode 4需要交换机支持802.3ad
|
||||
|
||||
### 三、网卡配置文件
|
||||
|
||||
2个物理网口分别是:eth0,eth1
|
||||
|
||||
绑定后的虚拟口是:bond0
|
||||
|
||||
服务器IP是:192.168.0.100
|
||||
|
||||
1)修改eth0配置文件
|
||||
|
||||
```Plain Text
|
||||
vim /etc/sysconfig/network-scripts/ifcfg-eth0
|
||||
DEVICE=eth0
|
||||
BOOTPROTO=none
|
||||
MASTER=bond0
|
||||
SLAVE=yes
|
||||
ONBOOT=yes
|
||||
|
||||
123456
|
||||
```
|
||||
|
||||
2)修改eth1配置文件
|
||||
|
||||
```Plain Text
|
||||
vim /etc/sysconfig/network-scripts/ifcfg-eth1
|
||||
DEVICE=eth1
|
||||
BOOTPROTO=none
|
||||
MASTER=bond0
|
||||
SLAVE=yes
|
||||
ONBOOT=yes
|
||||
|
||||
123456
|
||||
```
|
||||
|
||||
3)修改bond0配置文件
|
||||
|
||||
```Plain Text
|
||||
vim /etc/sysconfig/network-scripts/ifcfg-bond0
|
||||
DEVICE=bond0
|
||||
BOOTPROTO=static
|
||||
IPADDR=192.168.0.100
|
||||
NETMASK=255.255.255.0
|
||||
ONBOOT=yes
|
||||
|
||||
123456
|
||||
```
|
||||
|
||||
4)修改bonding配置文件
|
||||
|
||||
CentOS6追加写/etc/modprobe.d/dist.conf,CentOS7新建写/etc/modprobe.d/bonding.conf
|
||||
|
||||
```Plain Text
|
||||
alias bond0 bonding
|
||||
options bond0 miimon=100 mode=6
|
||||
|
||||
12
|
||||
```
|
||||
|
||||
5)加载bonding模块
|
||||
|
||||
```Plain Text
|
||||
modprobe bonding
|
||||
|
||||
1
|
||||
```
|
||||
|
||||
确认模块是否加载成功
|
||||
|
||||
```Plain Text
|
||||
lsmod |grep bonding
|
||||
|
||||
1
|
||||
```
|
||||
|
||||
6)重启网络
|
||||
|
||||
```Plain Text
|
||||
service network restart
|
||||
|
||||
1
|
||||
```
|
||||
|
||||
查看bond
|
||||
|
||||
```Plain Text
|
||||
cat /proc/net/bonding/bond0
|
||||
|
||||
1
|
||||
```
|
||||
|
||||
### 四、设置多个bond
|
||||
|
||||
1)多个bond口的模式设成相同
|
||||
|
||||
```Plain Text
|
||||
alias bond0 bonding
|
||||
alias bond1 bonding
|
||||
options bonding max_bonds=2 miimon=100 mode=6
|
||||
|
||||
123
|
||||
```
|
||||
|
||||
2)不同的bond口mode设成不一样
|
||||
|
||||
```Plain Text
|
||||
alias bond0 bonding
|
||||
options bond0 miimon=100 mode=1
|
||||
install bond1 /sbin/modprobe bonding -o bond1 miimon=100 mode=0
|
||||
|
||||
123
|
||||
```
|
||||
|
||||
miimon:监视网络链接的频度,单位是毫秒,我们设置的是100毫秒
|
||||
|
||||
max_bonds:配置的bond口个数
|
||||
|
||||
mode:bond模式,在一般的实际应用中,0和1用的比较多
|
||||
|
||||
官方介绍:
|
||||
|
||||
>
|
||||
|
||||
- mode=0 (Balance Round Robin) per packet
|
||||
|
||||
- mode=1 (Active backup)
|
||||
|
||||
- mode=2 (Balance XOR)
|
||||
|
||||
- mode=3 (Broadcast)
|
||||
|
||||
- mode=4 (802.3ad)
|
||||
|
||||
- mode=5 (Balance TLB)
|
||||
|
||||
- mode=6 (Balance ALB)
|
||||
|
||||
-
|
||||
|
||||
- Mode 0 (balance-rr)
|
||||
This mode transmits packets in a sequential order from the first available slave through the last. If two real interfaces are slaves in the bond and two packets arrive destined out of the bonded interface the first will be transmitted on the first slave and the second frame will be transmitted on the second slave. The third packet will be sent on the first and so on. This provides load balancing and fault tolerance.
|
||||
|
||||
- Mode 1 (active-backup)
|
||||
Mode 1 places one of the interfaces into a backup state and will only make it active if the link is lost by the active interface. Only one slave in the bond is active at an instance of time. A different slave becomes active only when the active slave fails. This mode provides fault tolerance.
|
||||
|
||||
- Mode 2 (balance-xor)
|
||||
Transmits based on XOR formula. (Source MAC address is XOR’d with destination MAC address) modula slave count. This selects the same slave for each destination MAC address and provides load balancing and fault tolerance.
|
||||
|
||||
- Mode 3 (broadcast)
|
||||
The broadcast mode transmits everything on all slave interfaces. This mode is least used (only for a specific purpose) and provides only fault tolerance.
|
||||
|
||||
- Mode 4 (802.3ad)
|
||||
The 802.3ad mode is known as Dynamic Link Aggregation mode. It creates aggregation groups that share the same speed and duplex settings. This mode requires a switch that supports IEEE 802.3ad Dynamic link. Slave selection for outgoing traffic is done according to the transmit hash policy, which may be changed from the default simple XOR policy via the xmit_hash_policy option. Note that not all transmit policies may be 802.3ad compliant, particularly in regards to the packet mis-ordering requirements of section 43.2.4 of the 802.3ad standard. Differing peer implementations will have varying tolerances for noncompliance.
|
||||
|
||||
- Mode 5 (balance-tlb)
|
||||
This is called as Adaptive transmit load balancing. The outgoing traffic is distributed according to the current load and queue on each slave interface. Incoming traffic is received by the current slave.
|
||||
|
||||
- Mode 6 (balance-alb)
|
||||
This is Adaptive load balancing mode. This includes balance-tlb + receive load balancing (rlb) for IPV4 traffic. The receive load balancing is achieved by ARP negotiation. The bonding driver intercepts the ARP Replies sent by the server on their way out and overwrites the src hw address with the unique hw address of one of the slaves in the bond such that different clients use different hw addresses for the server.
|
||||
|
||||
### Modes of bonding :
|
||||
|
||||
RHEL bonding supports 7 possible “modes” for bonded interfaces. These modes determine the way in which traffic sent out of the bonded interface is actually dispersed over the real interfaces. Modes 0, 1, and 2 are by far the most commonly used among them.
|
||||
|
||||
参考链接
|
||||
|
||||
> https://www.cnblogs.com/lcword/p/5914089.html
|
||||
https://www.cloudibee.com/network-bonding-modes/
|
||||
|
||||
文章知识点与官方知识档案匹配,可进一步学习相关知识
|
||||
|
||||
[云原生入门技能树](https://edu.csdn.net/skill/cloud_native/?utm_source=csdn_ai_skill_tree_blog)[首页](https://edu.csdn.net/skill/cloud_native/?utm_source=csdn_ai_skill_tree_blog)[概览](https://edu.csdn.net/skill/cloud_native/?utm_source=csdn_ai_skill_tree_blog)11741 人正在系统学习中
|
||||
|
||||

|
||||
|
||||
[已关注](javascript:;)
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
-
|
||||
|
||||

|
||||
|
||||
*[linux](https://download.csdn.net/download/weixin_38730977/12665368)*[ ](https://download.csdn.net/download/weixin_38730977/12665368)*[bond](https://download.csdn.net/download/weixin_38730977/12665368)*[配置步骤中的七](https://download.csdn.net/download/weixin_38730977/12665368)*[种](https://download.csdn.net/download/weixin_38730977/12665368)[bond](https://download.csdn.net/download/weixin_38730977/12665368)[模式](https://download.csdn.net/download/weixin_38730977/12665368)*
|
||||
|
||||
07-27
|
||||
|
||||
[本文主要介绍](https://download.csdn.net/download/weixin_38730977/12665368)*[linux](https://download.csdn.net/download/weixin_38730977/12665368)*[ ](https://download.csdn.net/download/weixin_38730977/12665368)*[bond](https://download.csdn.net/download/weixin_38730977/12665368)*[配置步骤中的七](https://download.csdn.net/download/weixin_38730977/12665368)*[种](https://download.csdn.net/download/weixin_38730977/12665368)[bond](https://download.csdn.net/download/weixin_38730977/12665368)[模式](https://download.csdn.net/download/weixin_38730977/12665368)*[,希望对您的学习有所帮助。](https://download.csdn.net/download/weixin_38730977/12665368)
|
||||
|
||||
*[linux](https://download.csdn.net/download/weixin_38499553/14889019)*[多](https://download.csdn.net/download/weixin_38499553/14889019)*[网卡](https://download.csdn.net/download/weixin_38499553/14889019)*[的7](https://download.csdn.net/download/weixin_38499553/14889019)*[种](https://download.csdn.net/download/weixin_38499553/14889019)[bond](https://download.csdn.net/download/weixin_38499553/14889019)[模式](https://download.csdn.net/download/weixin_38499553/14889019)*[原理配置](https://download.csdn.net/download/weixin_38499553/14889019)
|
||||
|
||||
01-20
|
||||
|
||||
*[网卡](https://download.csdn.net/download/weixin_38499553/14889019)*[绑定的目的: 1.提高](https://download.csdn.net/download/weixin_38499553/14889019)*[网卡](https://download.csdn.net/download/weixin_38499553/14889019)*[的吞吐量。 2.增强](https://download.csdn.net/download/weixin_38499553/14889019)*[网络](https://download.csdn.net/download/weixin_38499553/14889019)*[的高可用,同时也能实现负载均衡。 ](https://download.csdn.net/download/weixin_38499553/14889019)*[网卡](https://download.csdn.net/download/weixin_38499553/14889019)*[绑定mode共有七](https://download.csdn.net/download/weixin_38499553/14889019)*[种](https://download.csdn.net/download/weixin_38499553/14889019)*[(0~6) ](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)*[0、](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)*[1、](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)*[2、](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)*[3、](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)*[4、](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)*[5、](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)*[6 常用的有三](https://download.csdn.net/download/weixin_38499553/14889019)*[种](https://download.csdn.net/download/weixin_38499553/14889019)*[ mode=0:平衡负载](https://download.csdn.net/download/weixin_38499553/14889019)*[模式](https://download.csdn.net/download/weixin_38499553/14889019)*[,有自动备援,但需要”Switch”支援及设定。 mode=1:自动备援](https://download.csdn.net/download/weixin_38499553/14889019)*[模式](https://download.csdn.net/download/weixin_38499553/14889019)*[,其中一条线若断线,其他线路将会自动备援。 mode=6:平衡负载](https://download.csdn.net/download/weixin_38499553/14889019)*[模式](https://download.csdn.net/download/weixin_38499553/14889019)*[,有自动备援,不必”Switch”支援及设定。 ](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)[模式](https://download.csdn.net/download/weixin_38499553/14889019)*[: (1)Mode=0(balance-rr) 表示负载分担round-robin,平衡轮询策略,具有负载平衡和容错功能 ](https://download.csdn.net/download/weixin_38499553/14889019)*[bond](https://download.csdn.net/download/weixin_38499553/14889019)*[的](https://download.csdn.net/download/weixin_38499553/14889019)*[网卡](https://download.csdn.net/download/weixin_38499553/14889019)*[MAC为当](https://download.csdn.net/download/weixin_38499553/14889019)
|
||||
|
||||
|
||||
|
||||
*[bond](https://blog.csdn.net/qq_59161414/article/details/125898820)[模式](https://blog.csdn.net/qq_59161414/article/details/125898820)*[配置](https://blog.csdn.net/qq_59161414/article/details/125898820)
|
||||
|
||||
[qq_59161414的博客](https://blog.csdn.net/qq_59161414)
|
||||
|
||||

|
||||
|
||||
*[网卡](https://blog.csdn.net/qq_59161414/article/details/125898820)[bond](https://blog.csdn.net/qq_59161414/article/details/125898820)*[是通过把多张](https://blog.csdn.net/qq_59161414/article/details/125898820)*[网卡](https://blog.csdn.net/qq_59161414/article/details/125898820)*[绑定为一个逻辑](https://blog.csdn.net/qq_59161414/article/details/125898820)*[网卡](https://blog.csdn.net/qq_59161414/article/details/125898820)*[,实现本地](https://blog.csdn.net/qq_59161414/article/details/125898820)*[网卡](https://blog.csdn.net/qq_59161414/article/details/125898820)*[的冗余,带宽扩容和负载均衡。在应用部署中是一](https://blog.csdn.net/qq_59161414/article/details/125898820)*[种](https://blog.csdn.net/qq_59161414/article/details/125898820)*[常用的技术](https://blog.csdn.net/qq_59161414/article/details/125898820)
|
||||
|
||||
*[Linux](https://blog.csdn.net/wonderviolet/article/details/108881608)*[6&7 绑定](https://blog.csdn.net/wonderviolet/article/details/108881608)*[网卡](https://blog.csdn.net/wonderviolet/article/details/108881608)*[【](https://blog.csdn.net/wonderviolet/article/details/108881608)*[bond](https://blog.csdn.net/wonderviolet/article/details/108881608)*[ing和team】](https://blog.csdn.net/wonderviolet/article/details/108881608)
|
||||
|
||||
[wonderviolet的博客](https://blog.csdn.net/wonderviolet)
|
||||
|
||||

|
||||
|
||||
*[Linux](https://blog.csdn.net/wonderviolet/article/details/108881608)*[ ](https://blog.csdn.net/wonderviolet/article/details/108881608)*[网卡](https://blog.csdn.net/wonderviolet/article/details/108881608)*[绑定 在RHEL 7 之前,](https://blog.csdn.net/wonderviolet/article/details/108881608)*[网卡](https://blog.csdn.net/wonderviolet/article/details/108881608)*[绑定常用的是](https://blog.csdn.net/wonderviolet/article/details/108881608)*[bond](https://blog.csdn.net/wonderviolet/article/details/108881608)*[ing模块,在RHEL7开始,支持使用team作](https://blog.csdn.net/wonderviolet/article/details/108881608)*[网卡](https://blog.csdn.net/wonderviolet/article/details/108881608)*[绑定,但在RHEL7中,](https://blog.csdn.net/wonderviolet/article/details/108881608)*[bond](https://blog.csdn.net/wonderviolet/article/details/108881608)*[ing依然可用。以下主要介绍](https://blog.csdn.net/wonderviolet/article/details/108881608)*[bond](https://blog.csdn.net/wonderviolet/article/details/108881608)*[ing模块配置双](https://blog.csdn.net/wonderviolet/article/details/108881608)*[网卡](https://blog.csdn.net/wonderviolet/article/details/108881608)*[绑定。 ](https://blog.csdn.net/wonderviolet/article/details/108881608)*[Linux](https://blog.csdn.net/wonderviolet/article/details/108881608)[网卡](https://blog.csdn.net/wonderviolet/article/details/108881608)*[绑定](https://blog.csdn.net/wonderviolet/article/details/108881608)*[模式](https://blog.csdn.net/wonderviolet/article/details/108881608)*[介绍 ](https://blog.csdn.net/wonderviolet/article/details/108881608)*[模式](https://blog.csdn.net/wonderviolet/article/details/108881608)*[简介 0 for balance-rr, 1 for active-backup, 2 for balance-xor, 3 for broadcast, 4 for 802.3ad, 5 for balance-tlb, 6 for balance-alb 常用](https://blog.csdn.net/wonderviolet/article/details/108881608)
|
||||
|
||||
-
|
||||
|
||||
*[Linux](https://blog.csdn.net/lyace2010/article/details/108903349)[网卡](https://blog.csdn.net/lyace2010/article/details/108903349)[bond](https://blog.csdn.net/lyace2010/article/details/108903349)[模式](https://blog.csdn.net/lyace2010/article/details/108903349)*
|
||||
|
||||
[lyace2010的博客](https://blog.csdn.net/lyace2010)
|
||||
|
||||

|
||||
|
||||
*[Bond](https://blog.csdn.net/lyace2010/article/details/108903349)[模式](https://blog.csdn.net/lyace2010/article/details/108903349)*[ 交换机配置 mode=0 balance-rr 轮询均衡](https://blog.csdn.net/lyace2010/article/details/108903349)*[模式](https://blog.csdn.net/lyace2010/article/details/108903349)*[ LACP mode on 强制链路聚合 mode=1 active-backup 主备](https://blog.csdn.net/lyace2010/article/details/108903349)*[模式](https://blog.csdn.net/lyace2010/article/details/108903349)*[ 无 mode=2 balance-xor HASH均衡](https://blog.csdn.net/lyace2010/article/details/108903349)*[模式](https://blog.csdn.net/lyace2010/article/details/108903349)*[ LACP mode on 强制链路聚合 mode=3 broadcast 广播](https://blog.csdn.net/lyace2010/article/details/108903349)*[模式](https://blog.csdn.net/lyace2010/article/details/108903349)*[ LACP mode on 强制链路聚合 mode=4 LACP (802.3ad) 动态链路聚合 LACP动态协商 mode=5 balance-tlb 发送...](https://blog.csdn.net/lyace2010/article/details/108903349)
|
||||
|
||||
*[Linux](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)[网卡](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)[bond](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[的七](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[种](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)[模式](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[详解,⽹卡绑定(](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[bond](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[)怎么实现?有哪些绑定⽅式?](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)
|
||||
|
||||
[weixin_45548465的博客](https://blog.csdn.net/weixin_45548465)
|
||||
|
||||

|
||||
|
||||
[第一](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[种](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)[模式](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[:mod=0,即:(balance-rr) Round-robin policy(平衡抡循环策略) 特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传 输完毕),此](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[模式](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)*[提供负载平衡和容错能力。......](https://huaweicloud.csdn.net/63561b27d3efff3090b5a72f.html)
|
||||
|
||||
*[linux](https://blog.csdn.net/m0_66900908/article/details/125831022)*[ ](https://blog.csdn.net/m0_66900908/article/details/125831022)*[bond](https://blog.csdn.net/m0_66900908/article/details/125831022)[模式](https://blog.csdn.net/m0_66900908/article/details/125831022)*[原理与配置](https://blog.csdn.net/m0_66900908/article/details/125831022)
|
||||
|
||||
[啊啊啊啊建的博客](https://blog.csdn.net/m0_66900908)
|
||||
|
||||

|
||||
|
||||
*[linux](https://blog.csdn.net/m0_66900908/article/details/125831022)*[ ](https://blog.csdn.net/m0_66900908/article/details/125831022)*[bond](https://blog.csdn.net/m0_66900908/article/details/125831022)[模式](https://blog.csdn.net/m0_66900908/article/details/125831022)*[原理与配置](https://blog.csdn.net/m0_66900908/article/details/125831022)
|
||||
|
||||
*[网卡](https://blog.csdn.net/fearless11/article/details/75945655)*[绑定7](https://blog.csdn.net/fearless11/article/details/75945655)*[种](https://blog.csdn.net/fearless11/article/details/75945655)[模式](https://blog.csdn.net/fearless11/article/details/75945655)*
|
||||
|
||||
[fearless11的博客](https://blog.csdn.net/fearless11)
|
||||
|
||||

|
||||
|
||||
*[网卡](https://blog.csdn.net/fearless11/article/details/75945655)*[绑定7](https://blog.csdn.net/fearless11/article/details/75945655)*[种](https://blog.csdn.net/fearless11/article/details/75945655)[模式](https://blog.csdn.net/fearless11/article/details/75945655)*[常用的三](https://blog.csdn.net/fearless11/article/details/75945655)*[种](https://blog.csdn.net/fearless11/article/details/75945655)*[:mode=0:平衡负载](https://blog.csdn.net/fearless11/article/details/75945655)*[模式](https://blog.csdn.net/fearless11/article/details/75945655)*[,有自动备援,但需要”Switch”支援及设定。 mode=1:自动备援](https://blog.csdn.net/fearless11/article/details/75945655)*[模式](https://blog.csdn.net/fearless11/article/details/75945655)*[,其中一条线若断线,其他线路将会自动备援。 mode=6:平衡负载](https://blog.csdn.net/fearless11/article/details/75945655)*[模式](https://blog.csdn.net/fearless11/article/details/75945655)*[,有自动备援,不必”Switch”支援及设定。需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options ](https://blog.csdn.net/fearless11/article/details/75945655)*[bond](https://blog.csdn.net/fearless11/article/details/75945655)*[0 miimon=100 mode=0是不够的,与](https://blog.csdn.net/fearless11/article/details/75945655)*[网卡](https://blog.csdn.net/fearless11/article/details/75945655)*[相连的交换机必须](https://blog.csdn.net/fearless11/article/details/75945655)
|
||||
|
||||
*[linux](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[多](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[网卡](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[绑定(](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[bond](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[)的多](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[种](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)[模式](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[测试](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)
|
||||
|
||||
[phxzxt的博客](https://blog.csdn.net/phxzxt)
|
||||
|
||||

|
||||
|
||||
[1、](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[bond](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[的基本原理: ](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[bond](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[技术是将多块物理](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[网卡](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[绑定同一IP地址对外提供服务,通过不同的](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[模式](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[配置,从而达到高可用、负载均衡及链路冗余等效果。 2、](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[bond](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[的](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[模式](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[: ](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[bond](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[总共有7](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[种](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)[模式](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[,分别是mode 0 -- mode 6 3、下面分别做这7](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[种](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)[模式](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[的](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[网卡](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[绑定,以及实际流量情况和对应交换机配置,先介绍一下测试服务器情况,真实物理机DELL R620,双万兆网口,对接交换机为华为S6720,创建](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[bond](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)*[工具 nmcli(centos自带),在线流量压力测试网站:超新星-免费压力测试 ①m](https://huaweicloud.csdn.net/6356672ad3efff3090b5d88f.html)
|
||||
|
||||
[[](https://blog.csdn.net/qq_43714097/article/details/128837007)*[Linux](https://blog.csdn.net/qq_43714097/article/details/128837007)*[系列]](https://blog.csdn.net/qq_43714097/article/details/128837007)*[linux](https://blog.csdn.net/qq_43714097/article/details/128837007)*[ ](https://blog.csdn.net/qq_43714097/article/details/128837007)*[bond](https://blog.csdn.net/qq_43714097/article/details/128837007)*[详解](https://blog.csdn.net/qq_43714097/article/details/128837007)
|
||||
|
||||
[qq_43714097的博客](https://blog.csdn.net/qq_43714097)
|
||||
|
||||

|
||||
|
||||
[bong也叫多](https://blog.csdn.net/qq_43714097/article/details/128837007)*[网卡](https://blog.csdn.net/qq_43714097/article/details/128837007)*[绑定,多块](https://blog.csdn.net/qq_43714097/article/details/128837007)*[网卡](https://blog.csdn.net/qq_43714097/article/details/128837007)*[虚拟成一张,实现冗余;多张](https://blog.csdn.net/qq_43714097/article/details/128837007)*[网卡](https://blog.csdn.net/qq_43714097/article/details/128837007)*[对外显示一张,具有同一个IP;](https://blog.csdn.net/qq_43714097/article/details/128837007)*[网络](https://blog.csdn.net/qq_43714097/article/details/128837007)*[配置都会使用](https://blog.csdn.net/qq_43714097/article/details/128837007)*[Bond](https://blog.csdn.net/qq_43714097/article/details/128837007)*[ing技术做网口硬件层面的冗余,防止单个网口应用的单点故障。1. mode1,5,6不需要交换机配置;2. mode0,2,3,4需要交换机配置;3. 常用的有mode0,1,4,6。](https://blog.csdn.net/qq_43714097/article/details/128837007)
|
||||
|
||||
*[Linux](https://download.csdn.net/download/Lidx0710/25035100)*[系统绑定多](https://download.csdn.net/download/Lidx0710/25035100)*[网卡](https://download.csdn.net/download/Lidx0710/25035100)*[的7](https://download.csdn.net/download/Lidx0710/25035100)*[种](https://download.csdn.net/download/Lidx0710/25035100)[bond](https://download.csdn.net/download/Lidx0710/25035100)[模式](https://download.csdn.net/download/Lidx0710/25035100)*[介绍.docx](https://download.csdn.net/download/Lidx0710/25035100)
|
||||
|
||||
09-26
|
||||
|
||||
*[Linux](https://download.csdn.net/download/Lidx0710/25035100)*[系统绑定多](https://download.csdn.net/download/Lidx0710/25035100)*[网卡](https://download.csdn.net/download/Lidx0710/25035100)*[的7](https://download.csdn.net/download/Lidx0710/25035100)*[种](https://download.csdn.net/download/Lidx0710/25035100)[bond](https://download.csdn.net/download/Lidx0710/25035100)[模式](https://download.csdn.net/download/Lidx0710/25035100)*[介绍.docx](https://download.csdn.net/download/Lidx0710/25035100)
|
||||
|
||||
*[Linux](https://download.csdn.net/download/sanmao456/11151233)[网卡](https://download.csdn.net/download/sanmao456/11151233)*[绑定](https://download.csdn.net/download/sanmao456/11151233)
|
||||
|
||||
04-29
|
||||
|
||||
*[Linux](https://download.csdn.net/download/sanmao456/11151233)[网卡](https://download.csdn.net/download/sanmao456/11151233)*[绑定mode共有七](https://download.csdn.net/download/sanmao456/11151233)*[种](https://download.csdn.net/download/sanmao456/11151233)*[(0~6) ](https://download.csdn.net/download/sanmao456/11151233)*[bond](https://download.csdn.net/download/sanmao456/11151233)*[0、](https://download.csdn.net/download/sanmao456/11151233)*[bond](https://download.csdn.net/download/sanmao456/11151233)*[1、](https://download.csdn.net/download/sanmao456/11151233)*[bond](https://download.csdn.net/download/sanmao456/11151233)*[2、](https://download.csdn.net/download/sanmao456/11151233)*[bond](https://download.csdn.net/download/sanmao456/11151233)*[3、](https://download.csdn.net/download/sanmao456/11151233)*[bond](https://download.csdn.net/download/sanmao456/11151233)*[4、](https://download.csdn.net/download/sanmao456/11151233)*[bond](https://download.csdn.net/download/sanmao456/11151233)*[5、](https://download.csdn.net/download/sanmao456/11151233)*[bond](https://download.csdn.net/download/sanmao456/11151233)*[6 常用的有三](https://download.csdn.net/download/sanmao456/11151233)*[种](https://download.csdn.net/download/sanmao456/11151233)*[ mode=0:平衡负载](https://download.csdn.net/download/sanmao456/11151233)*[模式](https://download.csdn.net/download/sanmao456/11151233)*[,有自动备援,但需要”Switch”支援及设定。 mode=1:自动备援](https://download.csdn.net/download/sanmao456/11151233)*[模式](https://download.csdn.net/download/sanmao456/11151233)*[,其中一条线若断线,其他...](https://download.csdn.net/download/sanmao456/11151233)
|
||||
|
||||
*[linux](https://download.csdn.net/download/weixin_38722874/14048341)*[ 使用](https://download.csdn.net/download/weixin_38722874/14048341)*[bond](https://download.csdn.net/download/weixin_38722874/14048341)*[实现双](https://download.csdn.net/download/weixin_38722874/14048341)*[网卡](https://download.csdn.net/download/weixin_38722874/14048341)*[绑定单个IP的示例代码](https://download.csdn.net/download/weixin_38722874/14048341)
|
||||
|
||||
01-09
|
||||
|
||||
*[bond](https://download.csdn.net/download/weixin_38722874/14048341)*[在](https://download.csdn.net/download/weixin_38722874/14048341)*[Linux](https://download.csdn.net/download/weixin_38722874/14048341)*[下叫](https://download.csdn.net/download/weixin_38722874/14048341)*[bond](https://download.csdn.net/download/weixin_38722874/14048341)*[ing,IBM称为etherchanel,broadcom叫team,但是名字怎么变,效果都是将两块或更多的](https://download.csdn.net/download/weixin_38722874/14048341)*[网卡](https://download.csdn.net/download/weixin_38722874/14048341)*[当做一块](https://download.csdn.net/download/weixin_38722874/14048341)*[网卡](https://download.csdn.net/download/weixin_38722874/14048341)*[使用,在增加带宽的同时也可以提高冗余性。 实现双](https://download.csdn.net/download/weixin_38722874/14048341)*[网卡](https://download.csdn.net/download/weixin_38722874/14048341)*[绑定的方法有两](https://download.csdn.net/download/weixin_38722874/14048341)*[种](https://download.csdn.net/download/weixin_38722874/14048341)*[: ](https://download.csdn.net/download/weixin_38722874/14048341)*[bond](https://download.csdn.net/download/weixin_38722874/14048341)*[和team 这里先...](https://download.csdn.net/download/weixin_38722874/14048341)
|
||||
|
||||
*[Linux](https://download.csdn.net/download/weixin_38569675/12843373)*[双](https://download.csdn.net/download/weixin_38569675/12843373)*[网卡](https://download.csdn.net/download/weixin_38569675/12843373)*[绑定实现负载均衡详解](https://download.csdn.net/download/weixin_38569675/12843373)
|
||||
|
||||
09-15
|
||||
|
||||
[主要为大家详细介绍了](https://download.csdn.net/download/weixin_38569675/12843373)*[Linux](https://download.csdn.net/download/weixin_38569675/12843373)*[双](https://download.csdn.net/download/weixin_38569675/12843373)*[网卡](https://download.csdn.net/download/weixin_38569675/12843373)*[绑定实现负载均衡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下](https://download.csdn.net/download/weixin_38569675/12843373)
|
||||
|
||||
*[Linux](https://download.csdn.net/download/garytemp/4065473)*[下](https://download.csdn.net/download/garytemp/4065473)*[Bond](https://download.csdn.net/download/garytemp/4065473)[网卡](https://download.csdn.net/download/garytemp/4065473)*[配置方法](https://download.csdn.net/download/garytemp/4065473)
|
||||
|
||||
02-15
|
||||
|
||||
[本文档教你如何在](https://download.csdn.net/download/garytemp/4065473)*[Linux](https://download.csdn.net/download/garytemp/4065473)*[下配置](https://download.csdn.net/download/garytemp/4065473)*[bond](https://download.csdn.net/download/garytemp/4065473)[网卡](https://download.csdn.net/download/garytemp/4065473)*[,可选择多](https://download.csdn.net/download/garytemp/4065473)*[种](https://download.csdn.net/download/garytemp/4065473)[bond](https://download.csdn.net/download/garytemp/4065473)[网卡](https://download.csdn.net/download/garytemp/4065473)*[工作](https://download.csdn.net/download/garytemp/4065473)*[模式](https://download.csdn.net/download/garytemp/4065473)*[。](https://download.csdn.net/download/garytemp/4065473)
|
||||
|
||||
*[linux](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[ 中几](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[种](https://blog.csdn.net/weixin_42548165/article/details/110199476)[bond](https://blog.csdn.net/weixin_42548165/article/details/110199476)[模式](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[详解 bonging](https://blog.csdn.net/weixin_42548165/article/details/110199476)
|
||||
|
||||
[weixin_42548165的博客](https://blog.csdn.net/weixin_42548165)
|
||||
|
||||

|
||||
|
||||
[目录 ](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[bond](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[ing---关于提高服务器的带宽策略 1 一:](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[bond](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[ing的概念 所谓](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[bond](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[ing就是将多块](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[网卡](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[绑定同一IP地址对外提供服务,可以实现](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[网卡](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[的带宽扩容、高可用或者负载均衡。 二:](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[bond](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[ing的优势 1 2 3 1 ](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[网络](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[负载均衡 2 提高带宽](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[网络](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[传输效率 3 ](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[网络](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[冗余与高可用 三:](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[bond](https://blog.csdn.net/weixin_42548165/article/details/110199476)*[i...](https://blog.csdn.net/weixin_42548165/article/details/110199476)
|
||||
|
||||
[多](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[配置](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)[模式](https://blog.csdn.net/weixin_42257277/article/details/117536475)*
|
||||
|
||||
[weixin_42257277的博客](https://blog.csdn.net/weixin_42257277)
|
||||
|
||||

|
||||
|
||||
[多](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[配置](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)[模式](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[如何查看机器中的](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[ing情况配置](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[ing环境准备操作步骤(1)新增](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[(2)添加slave(3)启动](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[(4)查看](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[连接状态(5)查看](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[运行](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[模式](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[状态模拟环境](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[故障故障](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[删除](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[删除slave 如何查看机器中的](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[ing情况 查看是否存在](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[: ip add 如何发现有带有 ](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[X 名字的](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[,那么说明本机是存在](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[ing情况的。 然后查看](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[网卡](https://blog.csdn.net/weixin_42257277/article/details/117536475)[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[ing的情况: cat /proc/net/](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[bond](https://blog.csdn.net/weixin_42257277/article/details/117536475)*[ing/](https://blog.csdn.net/weixin_42257277/article/details/117536475)
|
||||
|
||||
*[网卡](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[的7](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[种](https://blog.csdn.net/weixin_30271335/article/details/95346778)[bond](https://blog.csdn.net/weixin_30271335/article/details/95346778)[模式](https://blog.csdn.net/weixin_30271335/article/details/95346778)*
|
||||
|
||||
[weixin_30271335的博客](https://blog.csdn.net/weixin_30271335)
|
||||
|
||||

|
||||
|
||||
[一、](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[bond](https://blog.csdn.net/weixin_30271335/article/details/95346778)[模式](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[ Mode=0(balance-rr) 表示负载分担round-robin,和交换机的聚合强制不协商的方式配合 Mode=1(active-backup) 表示主备](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[模式](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[,只有一块](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[网卡](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[是active,另外一块是备的standby,这时如果交换机配的是捆绑,将不能正常工作,因为交换机往两块](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[网卡](https://blog.csdn.net/weixin_30271335/article/details/95346778)*[发包,有一半包是丢弃的 Mode=2(balance-xor) 表示XOR ...](https://blog.csdn.net/weixin_30271335/article/details/95346778)
|
||||
|
||||
*[linux](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[双](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网卡](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[绑定](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[配置](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)
|
||||
|
||||
[最新发布](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)
|
||||
|
||||
03-16
|
||||
|
||||
*[Linux](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[双](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网卡](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[绑定](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[配置是指将两个](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网卡](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[绑定在一起,形成一个虚拟的](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网络](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[接口,以提高](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网络](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[带宽和可靠性。具体配置步骤如下: 1. 安装](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[ing驱动:在](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[Linux](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[系统中,需要安装](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[ing驱动,以支持](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网卡](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[绑定功能。 2. 配置](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网络](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[接口文件:在/etc/network/interfaces文件中,添加](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[0虚拟接口的配置信息,包括IP地址、子网掩码、网关等。 3. 配置](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[ing](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[模式](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[:根据实际需求,选择不同的](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[ing](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[模式](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[,如负载均衡、容错等。 4. 配置](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网卡](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[参数:在每个物理](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网卡](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[的配置文件中,添加](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[0虚拟接口的配置信息,包括](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[ing](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[模式](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[、MAC地址等。 5. 重启](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网络](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[服务:完成以上配置后,需要重启](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网络](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[服务,使配置生效。 总之,](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[Linux](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[双](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网卡](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[绑定](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[bond](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[配置可以提高](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网络](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[带宽和可靠性,适用于需要高速、稳定](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[网络](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)*[连接的场景。](https://wenku.csdn.net/answer/24e607e9a6e77fd7f4d7ffb4648ef064)
|
||||
|
||||
### “相关推荐”对你有帮助么?
|
||||
|
||||

|
||||
|
||||
非常没帮助
|
||||
|
||||

|
||||
|
||||
没帮助
|
||||
|
||||

|
||||
|
||||
一般
|
||||
|
||||

|
||||
|
||||
有帮助
|
||||
|
||||

|
||||
|
||||
非常有帮助
|
||||
|
||||
- [关于我们](https://www.csdn.net/company/index.html#about)
|
||||
|
||||
- [招贤纳士](https://www.csdn.net/company/index.html#recruit)
|
||||
|
||||
- [商务合作](https://marketing.csdn.net/questions/Q2202181741262323995)
|
||||
|
||||
- [寻求报道](https://marketing.csdn.net/questions/Q2202181748074189855)
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
- 工作时间 8:30-22:00
|
||||
|
||||
- [公安备案号11010502030143](http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502030143)
|
||||
|
||||
- [京ICP备19004658号](http://beian.miit.gov.cn/publish/query/indexFirst.action)
|
||||
|
||||
- [京网文〔2020〕1039-165号](https://csdnimg.cn/release/live_fe/culture_license.png)
|
||||
|
||||
- [经营性网站备案信息](https://csdnimg.cn/cdn/content-toolbar/csdn-ICP.png)
|
||||
|
||||
- [北京互联网违法和不良信息举报中心](http://www.bjjubao.org/)
|
||||
|
||||
- [家长监护](https://download.csdn.net/tutelage/home)
|
||||
|
||||
- [网络110报警服务](http://www.cyberpolice.cn/)
|
||||
|
||||
- [中国互联网举报中心](http://www.12377.cn/)
|
||||
|
||||
- [Chrome商店下载](https://chrome.google.com/webstore/detail/csdn%E5%BC%80%E5%8F%91%E8%80%85%E5%8A%A9%E6%89%8B/kfkdboecolemdjodhmhmcibjocfopejo?hl=zh-CN)
|
||||
|
||||
- [账号管理规范](https://blog.csdn.net/blogdevteam/article/details/126135357)
|
||||
|
||||
- [版权与免责声明](https://www.csdn.net/company/index.html#statement)
|
||||
|
||||
- [版权申诉](https://blog.csdn.net/blogdevteam/article/details/90369522)
|
||||
|
||||
- [出版物许可证](https://img-home.csdnimg.cn/images/20220705052819.png)
|
||||
|
||||
- [营业执照](https://img-home.csdnimg.cn/images/20210414021142.jpg)
|
||||
|
||||
- ©1999-2023北京创新乐知网络技术有限公司
|
||||
|
||||

|
||||
|
||||
[zclinux_](https://zclinux.blog.csdn.net/)
|
||||
|
||||

|
||||
|
||||
-
|
||||
|
||||
-
|
||||
|
||||
-
|
||||
|
||||
- 140万+
|
||||
|
||||
访问
|
||||
|
||||

|
||||
|
||||
等级
|
||||
|
||||
- 1万+
|
||||
|
||||
积分
|
||||
|
||||
- 7258
|
||||
|
||||
粉丝
|
||||
|
||||
- 304
|
||||
|
||||
获赞
|
||||
|
||||
- 131
|
||||
|
||||
评论
|
||||
|
||||
- 1121
|
||||
|
||||
收藏
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
[私信](https://im.csdn.net/chat/imliuqun123)
|
||||
|
||||
已关注
|
||||
|
||||

|
||||
|
||||
### 热门文章
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 分类专栏
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 最新评论
|
||||
|
||||
- [【Linux】free命令查看内存和实际物理内存有差异问题分析](https://zclinux.blog.csdn.net/article/details/126120360#comments_26016911)
|
||||
|
||||
[zclinux_: ](https://zclinux.blog.csdn.net/)内容已改正
|
||||
|
||||
- [【Linux】free命令查看内存和实际物理内存有差异问题分析](https://zclinux.blog.csdn.net/article/details/126120360#comments_26015250)
|
||||
|
||||
[今天不想吃火锅: ](https://blog.csdn.net/qq_42820921)【1882192-1860324=21868k】1860324是怎么来的
|
||||
|
||||
- [【saltstack】认证失败,无法生成minion_master.pub问题处理总结](https://zclinux.blog.csdn.net/article/details/124247538#comments_25675087)
|
||||
|
||||

|
||||
|
||||
- [【Linux】tmpfile 使用介绍](https://zclinux.blog.csdn.net/article/details/128955567#comments_25149925)
|
||||
|
||||

|
||||
|
||||
- [【Zabbix】配置zabbix agent向多个server发送数据](https://zclinux.blog.csdn.net/article/details/110222346#comments_24459792)
|
||||
|
||||
[魏天逸: ](https://blog.csdn.net/weixin_48127736)写错了 server Ip 用逗号 隔开 不然只能第二个起作用 server=ip1,ip2
|
||||
|
||||
### 您愿意向朋友推荐“博客详情页”吗?
|
||||
|
||||

|
||||
|
||||
强烈不推荐
|
||||
|
||||

|
||||
|
||||
不推荐
|
||||
|
||||

|
||||
|
||||
一般般
|
||||
|
||||

|
||||
|
||||
推荐
|
||||
|
||||

|
||||
|
||||
强烈推荐
|
||||
|
||||
### 最新文章
|
||||
|
||||
- [【Linux】查看服务器硬件信息](https://zclinux.blog.csdn.net/article/details/130149929)
|
||||
|
||||
- [【Linux】 密码相关。pwconv](https://zclinux.blog.csdn.net/article/details/130149903)
|
||||
|
||||
- [【Linux】ping sendmsg 不允许的操作](https://zclinux.blog.csdn.net/article/details/130149868)
|
||||
|
||||
[2023年25篇](https://zclinux.blog.csdn.net/?type=blog&year=2023&month=04)
|
||||
|
||||
[2022年36篇](https://zclinux.blog.csdn.net/?type=blog&year=2022&month=12)
|
||||
|
||||
[2021年20篇](https://zclinux.blog.csdn.net/?type=blog&year=2021&month=12)
|
||||
|
||||
[2020年22篇](https://zclinux.blog.csdn.net/?type=blog&year=2020&month=12)
|
||||
|
||||
[2019年36篇](https://zclinux.blog.csdn.net/?type=blog&year=2019&month=12)
|
||||
|
||||
[2018年139篇](https://zclinux.blog.csdn.net/?type=blog&year=2018&month=12)
|
||||
|
||||
[2017年69篇](https://zclinux.blog.csdn.net/?type=blog&year=2017&month=12)
|
||||
|
||||

|
||||
|
||||
### 目录
|
||||
|
||||
1. [网卡的7种bond模式](https://blog.csdn.net/imliuqun123/article/details/129256870#t0)
|
||||
|
||||
2.
|
||||
|
||||
3. [一、bond模式](https://blog.csdn.net/imliuqun123/article/details/129256870#t1)
|
||||
|
||||
4. [二、交换机设置](https://blog.csdn.net/imliuqun123/article/details/129256870#t2)
|
||||
|
||||
5. [三、网卡配置文件](https://blog.csdn.net/imliuqun123/article/details/129256870#t3)
|
||||
|
||||
6. [四、设置多个bond](https://blog.csdn.net/imliuqun123/article/details/129256870#t4)
|
||||
|
||||
7. [Modes of bonding :](https://blog.csdn.net/imliuqun123/article/details/129256870#t5)
|
||||
|
||||

|
||||
|
||||
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 399 B |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 27 KiB |