• [问题求助] srs在openEuler 22.03-lts-sp3 编译后Initialize ST failed问题求助解决思路
     srs 源代码在openEuler 22.03-lts-sp3 的x86和aarch64版本下编译,都没有报错,但一个能正常运行,一个不能运行,问题再哪里?  wget https://github.com/ossrs/srs/archive/refs/tags/v5.0-r2.zip   unzip v5.0-r2.zip   cd srs-5.0-r2/trunk/   ./configure   make   make install   x86下正常运行:  /usr/local/srs/objs/srs -v   5.0.210   aarch64下则报错:  [root@b5d6e7293ab6 ~]# /usr/local/srs/objs/srs -v [2024-04-16 16:47:13.679][ERROR][85434][][1] Failed, code=1014(StInitialize)(Initialize ST failed) : thread init : initialize st failed : st initialize failed, r0=-1 thread [85434][]: do_main() [./src/main/srs_main_server.cpp:114][errno=1] thread [85434][]: setup_thread_locals() [./src/app/srs_app_threads.cpp:562][errno=1] thread [85434][]: srs_st_init() [./src/protocol/srs_protocol_st.cpp:69][errno=1](Operation not permitted) [root@b5d6e7293ab6 ~]#  求助解决思路,谢谢 
  • [问题求助] EulerOS 的iso镜像在哪里下载
     EulerOS 的iso镜像在哪里下载,华为镜像站只有软件包的提供,没有iso镜像的下载
  • [技术干货] openEuler配置SPE环境笔记分享
    说明 TaiShan 200系列服务器从V159版本BIOS开始支持SPE功能。检查BIOS配置项 MISC Config--> SPE的状态,如果状态为Disabled需要更改为Enabled。使用SSH远程登录工具,以root用户登录Linux操作系统命令行界面。 配置系统启动参数。 执行如下命令编辑配置文件。 vim /etc/grub2-efi.cfg定位到内核版本对应的开机启动项,在末尾增加“kpti=off”。 linux /vmlinuz-4.19.90-2003.4.0.0036.oe1.aarch64 root=/dev/mapper/openeuler-root ro rd.lvm.lv=openeuler/root rd.lvm.lv=openeuler/swap video=VGA-1:640x480-32@60me rhgb quiet smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 crashkernel=1024M,high video=efifb:off video=VGA-1:640x480-32@60me kpti=off须知由于设置“kpti=off”后,系统安全性降低,禁止在生产环境上运行。按“ESC”,输入“:wq”,按“Enter”保存并退出。 执行reboot命令重启服务器。 安装鲲鹏性能分析工具后,执行如下命令确认SPE是否开启成功。 perf list | grep arm_spe显示如下内容说明SPE已成功开启。arm_spe_0// [Kernel PMU event] (适用于CentOS 7.6)配置SPE环境说明TaiShan 200系列服务器从V159版本BIOS开始支持SPE功能。 若要执行访存分析中的Miss事件分析,需先编译perf,便于支持SPE采集。 检查BIOS配置项 MISC Config--> SPE的状态,如果为Disable需要更改为Enable状态。使用SSH远程登录工具,以系统用户root登录Linux操作系统命令行界面。 配置系统启动参数。 执行如下命令编辑配置文件。 vim /boot/efi/EFI/centos/grub.cfg定位到内核版本对应的开机启动项,在末尾增加“kpti=off”。 linux /vmlinuz-4.14.0-115.el7a.0.1.aarch64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 kpti=off须知由于设置“kpti=off”后,系统安全性降低,禁止在生产环境上运行。按“ESC”,输入“:wq”,按“Enter”保存并退出。 执行reboot命令重启服务器。 执行如下命令获取内核启动参数,确认是否添加成功。 cat /proc/cmdline安装鲲鹏性能分析工具后,执行如下命令确认SPE是否开启成功。 perf list | grep arm_spe显示如下内容说明SPE已成功开启。arm_spe_0// [Kernel PMU event] 驱动安装 CentOS 7.6的Miss采集时,支持以下7个内核版本,内核驱动编译时请使用支持的版本。表1 支持内核版本操作系统内核版本CentOS 7.64.14.0-115.el7a.0.14.14.0-115.2.2.el7a4.14.0-115.5.1.el7a4.14.0-115.6.1.el7a4.14.0-115.7.1.el7a4.14.0-115.8.2.el7a4.14.0-115.10.1.el7a下载内核驱动至/home/spe_ko目录。将下载包中的devkitdriver-main/SPEdriver目录下的文件拷贝至/home/spe_ko目录下,以4.14.0-115.el7a.0.1版本为例,其他小版本需要先下载对应内核版本的rpm包,并将系统升级到该内核版本。编译驱动。 cd /home/spe_ko/arm_spe_pmumakecd /home/spe_ko/spe_devicemake查看驱动文件。 ls -l /home/spe_ko/arm_spe_pmu/arm_spe_pmu.kols -l /home/spe_ko/arm_spe_pmu/spe_device.koko文件安装。 insmod /home/spe_ko/arm_spe_pmu/arm_spe_pmu.koinsmod /home/spe_ko/arm_spe_pmu/spe_device.ko编译perf 下载内核源码到/home/spe_perf/kernel-alt-4.14.0-115.el7a.0.1目录。 检查flex和bison依赖包。 rpm -qa |grep bisonrpm -qa |grep flex如果没有相关依赖,则进行安装。yum install flexyum install bison解压rpm包。 cd /home/spe_perf/kernel-alt-4.14.0-115.el7a.0.1rpm2cpio kernel-alt-4.14.0-115.el7a.0.1.src.rpm | cpio -divmxz -d linux-4.14.0-115.el7a.tar.xztar -xvf linux-4.14.0-115.el7a.tar -C ..合入补丁。图3 下载页面将下载包中的perfpatch目录下的文件拷贝至/home/spe_perf目录下。cd /home/spe_perfchmod +x build_perf.sh./build_perf.sh查询arm_spe事件。 新生成的perf在“/home/spe_perf/linux-4.14.0-115.el7a/tools/perf”路径下,在perf路径执行perf list。cd /home/spe_perf/linux-4.14.0-115.el7a/tools/perf./perf list | grep arm_spe复制编译后的perf并修改权限。 mkdir -p /usr/bin/malluma/spe/4.14.0-115.el7a.0.1cp perf /usr/bin/malluma/spe/4.14.0-115.el7a.0.1chmod -R 500 /usr/bin/malluma/spe 转自:cid:link_0
  • [技术干货] nginx 实战应用
    NginxNginx 是什么Nginx(读作engine x)是一个轻量级开源Web服务器软件,由俄罗斯人Igor Sysoev在Rambler.ru任职期间开发,最初是为了解决高性能和可扩展性的问题而设计的。Nginx的历史可以追溯到2002年8月6日,当时Igor Sysoev发布了第一个公开版本0.1.0。在Nginx出现之前,Apache是最流行的Web服务器软件之一,但它的问题在于处理高并发连接时的性能瓶颈。Nginx采用了一种不同的设计思路,使用了异步事件驱动的方式处理请求,使得它能够更好地应对高并发场景。Nginx的发展得到了广泛的关注和支持。从nginx-0.5.x版本开始,它开始受到国内互联网人士的关注,并在国内得到了广泛的应用和推广。随着Nginx的不断发展和完善,它逐渐被应用于更多的场景,如反向代理、负载均衡、缓存等。在2011年,阿里巴巴旗下的淘宝网技术团队开源了一个基于Nginx的变种,名为Tengine。Tengine在Nginx的基础上增加了一些新的功能和优化,以满足淘宝等高并发场景的需求。随着时间的推移,Nginx逐渐成为了Web服务器市场的重要力量。根据2020年3月的数据,Nginx在全球Web服务器市场的占有率超过了老牌Web服务器Apache,成为了市场份额最大的Web服务器软件之一。Nginx之所以受到广泛的欢迎和应用,主要是因为它具有高性能、稳定性好、结构模块化、配置简单以及资源消耗低等优点。此外,Nginx还提供了丰富的功能和扩展,如SSL、GZIP、虚拟主机、URL重写等,可以满足各种Web应用的需求。总之,Nginx的历史可以追溯到2002年,经过十多年的发展和完善,它已经成为了Web服务器市场的重要力量,并在高并发场景下发挥着重要的作用。网络架构模式B/S 架构B/S即“Browser/Server”,是“浏览器/服务器”模式。在这种模式中,客户是浏览器,服务器是Web服务器。客户向服务器发出信息浏览请求,服务器向客户送回客户所要的万维网文档,以页面的形式显示在客户的屏幕上。B/S模式的一个重要特点是平台无关性,Browser、Web Server及主流语言Java和HTML等都可以做到与软硬件平台无关。另外,B/S模式的客户端变瘦,其功能主要是一个多媒体浏览器。C/S 架构C/S即“Client/Server”,是“客户端/服务器”模式。在这种模式中,客户(Client)和服务器(Server)分别是两个应用进程,可以位于互联网的两台不同主机上。服务器被动地等待服务请求,客户向服务器主动发出服务请求,服务器做出响应,并返回服务结果给客户。C/S模式中的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。技术架构收费技术栈:redhad + jqurey + js + svn + oracle + tomcat+java + apache省钱,走向开源技术栈:centos + jquery + js + git + mysql + java+tomcat + python+perl + nginx其他web服务器除了Nginx之外,还有一些其他常用的Web服务器软件,包括但不限于:Apache:Apache是最流行的Web服务器之一,具有跨平台、高可靠性、高性能、模块化设计、开源等优势。它支持几乎所有的Unix、Windows、Linux系统平台,尤其对Linux的支持相当完美。IIS(Internet Information Services):IIS是微软公司开发的Web服务器,具有良好的Windows系统集成性、易于管理、可靠性高等优势。它适用于Windows系统,可用于监视配置和控制Internet服务。Tomcat:Tomcat是一个开放源代码、运行servlet和JSP Web应用软件、并基于Java的Web应用软件容器。它具有跨平台、开源、易于扩展等优势,适用于Java应用程序的Web服务器。Lighttpd:Lighttpd是由德国人Jan Kneschke领导开发的,基于BSD许可的开源Web服务器软件。它的根本目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的Web服务器环境。除此之外,还有其他的Web服务器软件,如 Kangle、Tengin 等。这些服务器软件各有特点和优势,可以根据具体的需求和应用场景选择合适的 Web 服务器来提高Web应用的性能和可靠性。Nginx特点成本低nginx 强大在于其方向代理的功能,软件负载均衡,还存在硬件负载均衡(f5,netscaler),但是由于价格昂贵,小型公司不会使用,利用 nginx 搭建高可用性的负载均衡的站点由于 nginx 支持 BSD 开源许可协议,BSD 就是可以给用户更自己的使用权限,可以自由试用,修改源码,如果你修改后发布,还得遵顼 BSD 协议。利用软件技术,可以实现硬件负载均衡一样的实惠,经济实惠。几大优势nginx 配置文件更加易懂nginx 支持网站 url 地址重写(网站更换域名),还能够根据 url 的特点,进行请求转发判断(7层负载均衡,比如判断来自于移动端请求,发给移动端服务器,判断是来自于PC端流量,用户请求就发给运行着PC端代码的服务器)。nginx 支持高可用性配置(防止单节点故障,服务器崩溃),nginx 非常稳定,宕机异常退出的几率很小。nginx 能够节省忘了带宽,支持静态文件压缩后传输,支持 gzip 压缩功能。nginx 还能热部署,可以在不停止 nginx 情况下更新代码(reload),并且 nginx 支持 7*24h 运转。网络模型网络 IO 模型概念常见的 io 模型有:阻塞模型非阻塞模型IO 多路复用异步 IO网络 IO 指的就是在网络中进行数据的读,写操作,本质上就是一个 socket 套接字读取,socket 套接字在 linux 系统中被抽象为流的概念,网络 IO 就是对数据流的处理。安装nginx 提供商业版和开源版,且都支持 windows 和 linux 平台。商业版:https://nginx.com开源版:https://nginx.org环境准备准备 Nginx 需要的一些第三方系统库的支持,安装编译工具检查防火墙是否关闭,selinux关闭,yum 仓库的配置,网络环境等等。# 配置 aliyun yum 源 cd /etc/yum.repos.d/ mkdir bak mv * bak # 安装 centos 7 阿里的 yum 源,不同的版本可以安装不同的源 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 安装 epel 源 curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo # 清除之前的缓存 yum clean all # 缓存 aliyun 的 yum 源,加速下载 yum makecache # 安装常用的软件包 yum install -y vim bash-completion wget net-tools lrzsz # 安装如下的编译工具 yum install -y gcc gcc-c++ autoconf automake make # 安装 nginx 所需要的第三方系统库 yum install -y zlib zlib-devel openssl openssl-devel pcre pcre-devel httpd-tools # 关闭防火墙 systemctl disable --now firewalld setenforce 0编译安装 nginx# 1.下载 nignx 源代码 wget https://nginx.org/download/nginx-1.25.4.tar.gz # 或者下载 tengine wget https://tengine.taobao.org/download/tengine-3.1.0.tar.gz # 2.压缩 nginx tar -zxvf nginx-1.25.4.tar.gz -C /opt/ cd /opt/nginx-1.25.4/ [root@nginx-server nginx-1.25.4]# ll total 824 drwxr-xr-x. 6 502 games 4096 Mar 6 14:57 auto # 检测系统模块依赖信息 -rw-r--r--. 1 502 games 326027 Feb 15 00:03 CHANGES # 存放 nginx 的变化记录日志 -rw-r--r--. 1 502 games 498741 Feb 15 00:03 CHANGES.ru drwxr-xr-x. 2 502 games 168 Mar 6 14:57 conf # 存放 nginx 主配置文件的目录 -rwxr-xr-x. 1 502 games 2611 Feb 15 00:03 configure # 可执行的脚步,用于释放编译文件的定制脚步 drwxr-xr-x. 4 502 games 72 Mar 6 14:57 contrib # 提供了 vim 插件,让配置文件颜色区分 drwxr-xr-x. 2 502 games 40 Mar 6 14:57 html # 存放了标准的 html 页面文件 -rw-r--r--. 1 502 games 1397 Feb 15 00:03 LICENSE drwxr-xr-x. 2 502 games 21 Mar 6 14:57 man -rw-r--r--. 1 502 games 49 Feb 15 00:03 README drwxr-xr-x. 9 502 games 91 Feb 15 00:03 src # 存放了 nginx 源代码的目录 # 3.拷贝 nginx 的配置文件语法高亮,发给 vim 的插件目录 [root@nginx-server ~]# mkdir ~/.vim [root@nginx-server ~]# cp -r /opt/nginx-1.25.4/contrib/vim/* ~/.vim # 4.开始编译安装三部曲 # 1>: ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio # 2>: make(如同开始下一步安装) # 3>: make install(如同点击开始安装) # 5.配置 nginx 环境变量 [root@nginx-server ~]# vim /etc/profile.d/nginx.sh export PATH="$PATH:/opt/nginx/sbin" [root@nginx-server ~]# source /etc/profile.d/nginx.sh [root@nginx-server ~]# nginx -V nginx version: nginx/1.25.4 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/opt/nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio概念nginx 配置文件语法详解nginx.conf 是由指令和指令块组成每行语句都得有分号结束,指令和参数之间是有空格分割的指令块可以由大括号{}组织多语句nginx.conf 使用 # 号表示注释符nginx 支持用 $ 变量名支持该语法nginx 支持 include 语句,组合多个配置文件nginx 部分指令支持正则表达式,如 rewrite 重写指令nginx 核心功能都在 http{}指令块中,http{}中还包含了以下指令server{},对应一个站点配置,反向代理,静态资源location{},对应一个 urlupstream{},定义上流服务,负载均衡池########## 全局指令 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; ########## 局部指令 events { worker_connections 1024; } ########## http{}语句快,核心功能配置 http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; ########## 此处是 server{}语句块,是在 http{}语句块里的 server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }Nginx 信号传递nginx 的工作原理master 主进程是不处理请求的,而是分配请求发给 worker 进程,主进程负责重启,热加载,热部署等信号。master 是根据 nginx.conf 中 worker_process 定义启动时创建的工作进程数。当 worker 运行后,master 就处于一个等待的状态,等待用户的请求来临,或者系统信号。系统管理员可以发送 kill 指令,或者 nginx -s 信号,这样的形式操控 nginx。nginx 信号集nginx -s 常用的信号集功能如下:参数信号含义stopTERM强制关闭 nginx 服务nullINT强制关闭整个 nginx 服务quitQUIT优雅关闭整个 nginx 服务reopenUSR1重新打开日志记录reloadHUB重新读取配置文件,并且优雅的退出旧的 worker功能实践Nginx 命令行1.nginx #启停指令,-s 参数,值得是给 nginx 进程发送某种信号 nginx # 启动 nginx -s stop # 停止 nginx -s reload # 平滑重启,不重启进程,重载配置文件 2.查看nginx命令的帮助信息 [root@nginx-server conf]# nginx -h nginx version: nginx/1.25.4 Usage: nginx [-?hvVtTq] [-s signal] [-p prefix] [-e filename] [-c filename] [-g directives] Options: -?,-h : this help # 显示 nginx 的帮助信息 -v : show version and exit # 显示版本 -V : show version and configure options then exit # 显示版本和编译参数信息 -t : test configuration and exit # 检测 nginx 语法是否正确 -T : test configuration, dump it and exit # 检查配置,并输出配置信息 -q : suppress non-error messages during configuration testing # 在检测配置文件期间屏蔽非错误信息 -s signal : send signal to a master process: stop, quit, reopen, reload # 给 nginx 主进程发生一个信号,stop,停止运行,quit,优雅停止,reopen,重启记录nginx日志,reload,重读配置文件 -p prefix : set prefix path (default: /opt/nginx/) # 设置 nginx 目录前缀 -e filename : set error log file (default: logs/error.log) # 设置错误文件的路径 -c filename : set configuration file (default: conf/nginx.conf) # 设置主文件的路径 nginx -c /my/nginx.conf -g directives : set global directives out of configuration file # 从配置文件中设置全局指令nginx 热部署(未成功)热部署大致流程备份旧的程序(二进制文件,nginx 命令,/opt/nginx/sbin/nginx)编译安装新的二进制文件,覆盖旧的二进制文件(再装一个版本的ngin,且替换旧的nginx命令)发送 USR2 信号给旧的 master 进程发送 WINCH 信号给旧的 master 进程发送 QUIT 信号给旧的 master 进程、示例:# 1.备份 [root@nginx-server ~]# cp /opt/nginx/sbin/nginx /opt/nginx/sbin/nginx-1.25.4 # 2.安装不同版本的 nginx [root@nginx-server ~]# wget https://nginx.org/download/nginx-1.24.0.tar.gz # 压缩 [root@nginx-server ~]# tar -zxvf nginx-1.24.0.tar.gz -C /opt/ # 编译安装三部曲 [root@nginx-server ~]# cd /opt/nginx-1.24.0/ ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --with-threads --with-file-aio [root@nginx-server nginx-1.24.0]# make && make install # 3.姿势发送一个 USR2 信号给旧的 master process,作用是使得 nginx 旧的版本停止接受用户请求,并且切换为新的 nginx 版本。 [root@nginx-server sbin]# kill -USR2 `cat /opt/nginx/logs/nginx.pid ` # 4.发送WINCH信号 kill -WINCH ` cat /var/nginx_1.17/logs/nginx.pid.oldbin `Ngingx 日志切割日志切割是线上很常见的操作,能够控制单个日志文件的大小,便于对日志进行管理。# 1.针对 nginx 的访客日志进行切割 [root@nginx-server logs]# du -h * 4.0K access.log 4.0K error.log 4.0K nginx.pid # 2.以当前时间为文件名进行备份 [root@nginx-server logs]# mv access.log "access.log_$(date +"%Y-%m-%d")" # 3.发信号给 nginx 主进程,给他发送一个重新打开的信号,让 nginx 重新生成新的日志 nginx -s reopen # 等同于 kill -USR1 process id注意在以上的 nginx 重命名日志切割链,不要着急立即对文件修改,而是需要等待几秒钟,可能当业务量访问过大时,这个修改操作可能会有点急,不会立即生效。在生产环境下,日志切割主要时以定时任务的形式来操作编写一个定时日志切割的脚步vim cut_nginx_log.sh#!/bin/bash # nginx 日志存放点 logs_path="/opt/nginx/logs/" mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" + "%m") mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday" + "%m")/access_$(date -d "yesterday" + "%Y-%m-%d").log kill -USR1 `cat /opt/nginx/logs/nginx.pid`指定定日任务如下:每天的 0 点执行日志切割脚本。crontab -e 0 0 * * * /bin/bash /root/cut_nginx_log.shNginx 虚拟主机Nginx虚拟主机是一种特殊的互联网服务,它利用特殊的软硬件技术将一台运行在因特网上的服务器主机分成多个“虚拟”的主机。每台虚拟主机都可以作为一个独立的网站,拥有独立的域名,并具备完整的Internet服务器功能,如WWW、FTP、Email等。对于网站访问者来说,每一台虚拟主机就像是一台主机。小技巧:在编辑 nginx.conf 中的配置文件时,将光标移动到{/}(任意一个花括号的位置,比如,在 { 位置,按下 % 就可以跳到与之对应的另一半挂括号的位置了。注意:nginx.conf 中 server{} 虚拟主机标签的定义,默认加载顺序时自伤而下的匹配规则。静态站点vim /opt/nginx/conf/nginx.conf # 站点配置块 server{} server { # 定义监听端口 listen 80; # 定义虚拟主机的域名配置,没有域名就可以写 localhost 或者 _ 也行 server_name localhost; # 给 nginx 定义网站的编码 charset utf-8; # 日志,现在不用,可以不用管 #access_log logs/host.access.log main; # nginx 的路径匹配规则 # 如下的规则时最低级匹配,任何的 nginx 请求,都会进入如下 location 的匹配,去它所定义的目录中寻找资料 location / { # root 关键词,时定义网页根目录的,这个 html 时以 nginx 安装的路径为相对 root /www/root/; # index 关键词,定义 nginx 的有也文件名字,默认找哪个文件 index index.html index.htm; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # 创建网页站点根目录 mkdir -p /www/root echo "hello world!" > /www/root/index.html基于 IP 的多虚拟主机1.添加 ip[root@nginx-server conf.d]# ip ad add 192.168.113.101/24 dev ens33 [root@nginx-server conf.d]# ip ad add 192.168.113.102/24 dev ens33 [root@nginx-server conf.d]# ip ad add 192.168.113.103/24 dev ens332.添加配置到 nginx.confserver { listen 192.168.113.101:80; server_name localhost; location / { root /www/server1/; index index.html index.htm; } } server { listen 192.168.113.102:80; server_name localhost; location / { root /www/server2/; index index.html index.htm; } } server { listen 192.168.113.103:80; server_name localhost; location / { root /www/server3/; index index.html index.htm; } }3.设置站点文件mkdir /www/server{1..3} for i in `ls /www/ | grep server` ;do echo this is the $i > /www/$i/index.html ;done4.重载配置文件nginx -s reload5.测试网站[root@nginx-server nginx]# curl 192.168.113.101 this is the server1 [root@nginx-server nginx]# curl 192.168.113.102 this is the server2 [root@nginx-server nginx]# curl 192.168.113.103 this is the server3基于多域名的虚拟主机基于多域名的虚拟主机,用的还是不多的,还可能造成 ip 不足等问题,一般如果没有特殊需求,用的更多,且更方便的是基于多域名的虚拟主机。/etc/hosts 设置域名,进行本地测试使用[root@nginx-server ~]# vim /etc/hosts # 追加 192.168.113.31 server1.com 192.168.113.31 server2.com 192.168.113.31 server3.com修改配置# 还是拿之前那个基于 ip 的配置改 server { listen 80; server_name server1.com; location / { root /www/server1/; index index.html index.htm; } } server { listen 80; server_name server2.com; location / { root /www/server2/; index index.html index.htm; } } server { listen 80; server_name server3.com; location / { root /www/server3/; index index.html index.htm; } }设置站点文件# 还是拿之前那个基于 ip 的站点文件 index.html重载服务nginx -s reload测试网站[root@nginx-server conf.d]# curl server1.com this is the server1 [root@nginx-server conf.d]# curl server2.com this is the server2 [root@nginx-server conf.d]# curl server3.com this is the server3基于多端口的虚拟主机只需要修改 nginx.conf 中 server{}块里定义的 listen 端口参数即可,实验不同的端口,进行虚拟主机匹配修改配置# 还是拿之前那个基于 ip 的配置改 server { listen 81; location / { root /www/server1/; index index.html index.htm; } } server { listen 82; location / { root /www/server2/; index index.html index.htm; } } server { listen 83; location / { root /www/server3/; index index.html index.htm; } }设置站点文件# 还是拿之前那个基于 ip 的站点文件 index.html重载服务nginx -s reload测试网站[root@nginx-server conf.d]# curl localhost:81 this is the server1 [root@nginx-server conf.d]# curl localhost:82 this is the server2 [root@nginx-server conf.d]# curl localhost:83 this is the server3Nginx 静态资源压缩nginx 支持 gzip 压缩功能,经过 gzip 压缩之后的页面,图片,动态图这类的静态文件,能够压缩为原本的 30% 甚至更小,用户访问网络的体验会更好。启动 gzip 压缩功能,只需要在 http{} 配置中,打开如下参数即可:http { ... gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_proxied any; gzip_comp_level 6; gzip_vary on; gzip_min_length 1000; gzip_buffers 16 8k; ... }这里的配置项解释如下:gzip on;:启用 Gzip 压缩。gzip_types:定义哪些 MIME 类型的响应体将被 Gzip 压缩。你可以根据需要添加或删除类型。gzip_proxied any;:允许或者禁止压缩基于请求和响应的代理请求。gzip_comp_level 6;:设置压缩级别,范围从 1(最低压缩,最快处理速度)到 9(最高压缩,最慢处理速度)。gzip_vary on;:在响应头中添加 "Vary: Accept-Encoding" 以告知客户端内容经过了压缩。gzip_min_length 1000;:设置启用压缩的响应体最小长度(单位:字节)。小于这个长度的响应体将不会被压缩。gzip_buffers 16 8k;:设置压缩缓冲区大小和数量。日志功能日志对于程序员是很重要的,可以用于问题排错,记录程序运行时的状态。访客(access)日志Nginx 开启日志功能只需要再 nginx.conf 中找到 log_format 参数,定义日志的格式,以及定义日志的存储位置。http { .... # 定义日志的内容格式(记录内容的详细程度) log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log logs/access.log main; .... }nginx 的访客日志内容如下192.168.113.31 - - [08/Mar/2024:10:41:11 +0800] "GET / HTTP/1.1" 200 20 "-" "curl/7.29.0" # 定义格式如下 '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' $remote_addr # 记录访问者的 ip $remote_user # 记录访问者的用户名 $time_local # 记录访问的时间和地区信息 $request # 记录用户的 http 请求的首行信息 $status # 记录用户的 http 请求状态,也就是请求发出之后,响应的状态,200,301,404,502 $body_bytes_sent # 记录服务器发给客户端的响应数据字节大小 $http_referer # 记录本次请求时从哪个链接过来的,可以根据 refer 信息来进行防盗链 $http_user_agent # 记录客户端的访问信息,如浏览器信息,手机信息 $http_x_forwarded_for # 防止恶意爬虫,跳板机等,并捉到代理服务器后面的客户端ip错误(error)日志对于错误信息的调试,也是运维人员维护 nginx 的一个重要的手段。nginx 想要使用 error_log 就得打开 nginx.conf,找到关键字参数 error_log,它是放在 http{}称之为全局的变量参数,针对所有定义的 server{}的虚拟主机都会生效。#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;也可以单独的在写在虚拟主机中,单独记录某一个虚拟主机的错误日志。 server { listen 80; server_name localhost; charset utf-8; # 单独定义一个虚拟主机的错误日志 error_log logs/s1_error.log #access_log logs/host.access.log main; location / { root /www/root/; index index.html index.htm; } .... }错误日志的语法error_log file level; 日志级别有如下几种 debug info notice warn error crit alert emerg 这个级别是越来越严重,级别写的越低,记录的日志越详细,圣餐环境下常用的是 warn,error,crit 模式,日志的级别,可能会给服务器增加额外的大量 IO 消耗,因此,根据你实际的工作环境需求。Nginx 多虚拟主机日志针对每一个虚拟主机都配置好 access.log 更方便更清晰的对每一个虚拟主机进行访客信息管理。# 针对虚拟主机,添加日志的路径 server { listen 81; # 在每一个虚拟主机都添加 access_log 参数,就可以对每一个虚拟主机有不同的日志文件 access_log logs/server1_81.log; location / { root /www/server1/; index index.html index.htm; } }目录浏览能够将你的机器上目录资料,提供一个展示,无论是谁都可以快速访问,类似于 FTP 服务。配置文件如下,在server{}块中添加:server { listen 81; access_log logs/server1_81.log; location / { root /www/server1/; # root 目录里,不能存在 index.html 文件,因为浏览器默认访问的是 baidu.com/index.html #index index.html index.htm; # 关闭虚拟主机的默认首页功能 autoindex on; # 启动目录浏览功能 } }状态页功能nginx 提供了 status 模块,用于检测 nginx 的请求链接信息。这个功能需要再编译安装 nginx 的时候,添加 --with-http-status_module 参数,才能使用。nginx -V # 检查当前 nginx 是否支持 status 功能修改 nginx.conf,支持此功能,内容如下:# 1.确保你的 nginx.conf 主配置文件,支持 include 语法 include ../conf.d/*.conf; # 当当前的上一级目录 conf.d 目录下的所有 conf 文件,都识别成 nginx 的配置文件。 # 2.创建 status.conf vim /opt/nginx/conf.d/status.conf # 写入如下内容 server{ listen 88; location / { stub_status on; # 开启状态页功能 access_log off; # 关闭访客日志功能 } }状态页内容分析# 表示激活中的连接数 Active connections: 1 # server: nginx 启动后一共处理的请求数 # accepts handled: nginx 启动后处理的握手数 # requests: 表示 nginx 一共处理了多少次的请求 server accepts handled requests 96 96 912 # Reading: nginx 读取到客户端的 headers 数量 # Writing:nginx 响应给客户端的 headers 数量 # Waiting:nginx 处理完毕请求之后,等待下一次的请求驻留的连接数 waiting=actve-() Reading: 0 Writing: 1 Waiting: 0 使用 ab 命令,对 nginx 进行压力测试# 1.安装 ab 命令 yum install -y httpd-tools # 2.使用 ab 命令对 nginx 发送大量的连接 -n # 请求数量,一共发出多少个请求 -c # 请求并发数 -k # 表示启动 keepalived 保持连接功能 [root@nginx-server ~]# ab -kc 1000 -n 100000 http://127.0.0.1/location 路径匹配nginx 的 location 作用,是根据用户访问的 URL 路径,进行不同的处理方式,针对用户请求的网站 URL 进行匹配处理# location 在 nginx.conf 的写法 location / { # root 关键词,是定义网页根目录的,这个 html 是以 nginx 安装的路径作为匹配路径 root /www/root/; # index 关键词,定义 nginx 的首页文件名字 index index.html index.htm; }location 相关语法location [ = | ~ | ~* | / | ^~] url { # 做出的响应的处理动作 }匹配符号:匹配符匹配规则优先级=精确匹配1^~以某个字符开头,不做正则匹配2~*支持正则的匹配模式3/blog/当你访问 192.168.100.100/blog/xxx,nignx 就会把请求返回给这个 location4/通用匹配,不符合其他的 location 的匹配规则,返回这个 location5示例:server { listen 888; server_name _; # 最低级匹配,不符合其他 location 就来这 location / { return 500; } # 优先级最高,精确匹配,当用户访问 192.168.100.100:888/,请求就会到这来 location = / { return 401; } # 匹配任何以 /img/ 开头的请求,不支持正则 location ^~ /img/ { return 402; } # 匹配任何以 .gif 结尾的请求,支持正则 location ~* \.(gif|jpg|jpeg)$ { return 403; } # 以 /blog/ 开头的 URL,来这里,如符合其他 location,则以其他优先 location /blog/ { return 404; } }URL 地址重写Nginx 的 URL 地址重写功能,主要是使用 nginx 提供的 rewrite 功能,且支持正则表达式。rewrite 能够使用 URL 的跳转,实现 URL 规范化,根据请求的变量实现 URL 跳转等,基于 URl 重写功能常见的效果如下:对于爬虫程序的封禁,让其跳转都一个错误的页面。动态的 URL,伪装成静态的 html 页面,便于搜索引擎的抓取。新旧域名的更新。rewrite 语法rewrite ^/(.*) http://192.168.113.31/$1 parmanent; # 解释 rewrite # 是 nginx 地址重写的关键词指令,开启跳转功能。 正则 ^/(.*) # 表示匹配所有的请求,匹配成功后,跳转到后面指定的 rul 地址。 $1 # 是取出前面用户访问的 url 路径 parmanment # 表示 301 重定向的标记rewrite 结尾的参数标记如下:last:规则匹配完成后,继续向下匹配新的 location。break:本条规则匹配完成后,立即停止匹配动作。redirct:返回 302 临时重定向状态码,浏览器地址栏显示跳转后的 rul,爬虫不会更新该 url。permanent:返回 301 永久重定向,浏览器地址栏也显示跳转后的 rul ,爬虫会更新该网站 url。last 和 break 用于实现 url 重写,浏览器的地址栏不会发生变化。redirect 和 permanent 是用于 url 跳转,浏览器 url 地址栏会发生变化,跳转到新的 url 地址栏。示例,实现 301 url 跳转准备一个虚拟主机的配置文件,实现,当用于访问该虚拟主机,直接跳转到百度的首页面。server { listen 90; server_name _; location / { rewrite ^/(.*) http://www.baidu.com/$1 permanent; } }反向代理其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。反向代理在 nginx 中可以在 location{}块中来定义 proxy_pass 来实现反向代理。语法演示# 当客户端访问到 location,而 location 的动作就是将请求转发到 http://127.0.0.1:888 上。 location / { proxy_pass http://127.0.0.1:888; # 这种方式为四层代理 }示例实例1:实现效果:使用 Nginx 反向代理,访问 http://www.123.com 直接跳转到 127.0.0.1:82。注意:此处如果要想从 http://www.123.com 跳转到本机指定的ip,需要修改本机的hosts文件。此处略过配置代码server { listen 80; server_name www.123.com; location / { proxy_pass http://localhost:82; } }测试[root@nginx-server nginx]# curl www.123.com this is the server2示例实例2:实现效果:使用 Nginx 反向代理,根据访问的路径跳转到不同端口的服务中,Nginx 监听端口为 8080。配置代码server { listen 8080; server_name www.123.com; location / { root /www/server1/; autoindex on; } location /php/ { proxy_pass https://www.csdn.net/; } location /ws/ { proxy_pass http://www.baidu.com/; } }负载均衡Nginx要实现七层负载均衡需要用到proxy_pass代理模块配置。Nginx默认安装支持这个模块,我们不需要再做任何处理。Nginx的负载均衡是在Nginx的反向代理基础上把用户的请求根据指定的算法分发到一组【upstream虚拟服务池】。负载均衡的指令upstream 指令upstream:该指令是用来定义一组服务器,它们可以使监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定不同的权重,默认为1.# 语法 upstream name{...}server 指令server:该指令用来指定后端服务器的名称和一些参数,可以使用域名、IP、端口或者unix socket。# 语法 server name [parameters];常用负载均衡的三种模式:RR简单轮询(默认)RR(round-robin)轮询,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。示例upstream test { server localhost:8080; server localhost:8081; }balance权重又叫平滑的加权轮询(smooth weighted round-robin balancing),指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。示例upstream test { server localhost:8080 weight=2; server localhost:8081 weight=1; }ip_hash(可确保session一致)接下来是,基于IP哈希分配,上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,除非做session共享或者同步,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用ip_hash了,ip_hash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。示例upstream test { ip_hash; server localhost:8080; server localhost:8081; }示例实验目的:三个基于端口的虚拟主机,使用端口号 8080 负载均衡这三台主机。nginx 配置文件如下所示upstream backend{ server localhost:81; server localhost:83; server localhost:82; } server { listen 81; server_name _; location / { root /www/server1/; index index.html index.htm; } } server { listen 82; location / { root /www/server2/; index index.html index.htm; } } server { listen 83; location / { root /www/server3/; index index.html index.htm; } } server { listen 8080; server_name localhost; location / { proxy_pass http://backend/; } }缓存服务认证模块为了防止有点小网站不想让别人看到,nginx 就提供了可以在小网站上开启认证模块,别想看到哦我们的小网站,就需要账号密码,不然访问不了,让我们操作一下吧。nginx 提供了认证模块,语法是location { auth_basic 'string'; auth_basic_user_file conf/htpasswd; }语法知道了,现在需要生成一个密码文件,linux 提供了密码生成命令 htpasswd 是 apache 提供的密码生成工具,nginx 也支持 auth_basic 模块,因此我们可以利用 htpasswd 命令生成账户密码文件,提供给 nginx 去使用。# 安装命令 yum install -y httpd-tools # 语法 htpasswd -bc <filename> [username] [password] # 解释 -b # 在命令行中输入账号密码 -c # 创建密码文件默认 .access 文件采用加密方式 md5 加密。示例:# 生成密码文件 htpasswd -bc /opt/nginx/conf.d/.access ws 000000 # 配置文件编写如下 vim /opt/nginx/conf.d/learn_auth.conf server{ listen 85; server_name _; location / { root /opt/nginx/html/; index index.html index.htm; auth_basic 'learn nginx auth_module'; auth_basic_user_file /opt/nginx/conf.d/.access; } }动态请求分离HTTPS
  • [技术干货] iptables 实战应用
    iptables 防火墙iptables 是什么iptables 是一个用于配置 linux 内核中 IPv4 数据包过滤器和网络地址转换(NAT)的工具。它允许系统管理员根据特定的规则集控制进出的网络流量。iptables 提供了一种灵活而强大的方式来保护网络安全,实现网络地址转换,限制流量等。iptables 工作原理iptables 是基于 linux 内核中的 Netfilter 架构实现的。当数据包进入或离开系统时,Netfilter 框架会将数据包转递给 iptables 进行处理。它可以通过检查数据包的源地址,目标地址,协议类型,端口号等信息,并根据预定义的规则集来决定如何处理该数据包。iptables 的基本概念表(Table)表定义了特定类型的规则集。iptables 提供了四个表:filter、nat、mangle 和 raw。每个表用于不同的目的,如过滤数据包、网络地址转换等。链(Chain)链是规则的集合,用于确定数据包在系统中的处理路径,iptables 包含几个预定义的链,如 INPUT,OUTPUT 和 FORWARD。每个链都有特定的处理方式和默认策略。规则(Rule)规则则是定义在链中的指令,用于决定数据包的处理方式。规则由匹配条件和动作组成,当数据包满足条件时,将执行相应的动作。常见的 iptables 命令基本语法:use: iptabls [选项] <链名> <规则>匹配条件-A:追加到链上-p:指定数据包的协议类型,如 TCP、UDP、ICMP 等。-s:指定数据包的源地址。-d:指定数据包的目标地址。-i:指定数据包进入系统的网络接口。-o:指定数据包离开系统的网络接口。匹配选项--sport:指定数据包的源端口。--dport:指定数据包的目标端口。--state:指定数据包的连接状态,如 NEW、ESTABLISHED、RELATED 等。--mac-source:指定数据包的源 MAC 地址。--mac-destination:指定数据包的目标 MAC 地址。匹配动作-j:指定匹配成功时要执行的动作,如 ACCEPT、DROP、REJECT 等。示例演示使用 ip:192.168.113.13 的主机1 ping 本机2:192.168.113.11,我们创建两条规则。# 没创建规则前,如果要模拟,最好清理一下所有规则,iptables -F # 主机1 ping 主机2 [root@Euler03 ~]# ping 192.168.113.11 -c 2 PING 192.168.113.11 (192.168.113.11) 56(84) bytes of data. 64 bytes from 192.168.113.11: icmp_seq=1 ttl=64 time=0.176 ms 64 bytes from 192.168.113.11: icmp_seq=2 ttl=64 time=0.320 ms --- 192.168.113.11 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1024ms rtt min/avg/max/mdev = 0.176/0.248/0.320/0.072 ms # 设置第一条规则 iptables --table filter -A INPUT --source 192.168.113.13 -j REJECT # 主机1 ping 主机2 [root@Euler03 ~]# ping 192.168.113.11 -c 2 PING 192.168.113.11 (192.168.113.11) 56(84) bytes of data. From 192.168.113.11 icmp_seq=1 Destination Port Unreachable From 192.168.113.11 icmp_seq=2 Destination Port Unreachable 2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 30663ms # 设置第二条规则 iptables --table filter -A INPUT --source 192.168.113.13 -j DROP # 因为 iptables 规则执行顺序,要删除第一条规则 # 查看 iptables --table filter --list INPUT --line-numbers # 删除第一条规则,此时第二条规则会瞬移到第一条规则 iptables --table filter --delete INPUT 1 # 主机1 ping 主机2 [root@Euler03 ~]# ping 192.168.113.11 -c 2 PING 192.168.113.11 (192.168.113.11) 56(84) bytes of data. --- 192.168.113.11 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 1024ms注意:iptables 规则是从上往下读的,当规则1 和规则2 的源地址或目的地址一致,会优先执行规则 1。常见的 ipset 命令提供下载的国家IP块分配:www.ipdeny.com# 创建名称为test的IP集 ipset create test hash:ip # 添加地址合集到test IP集中 #! /bin/bash wget https://www.ipdeny.com/ipblocks/data/aggregated/in-aggregated.zone for i in `ls in-aggregated.zone` do ipset add test $i done if [ $? -eq 0 ] then echo "*****命令执行完成*****" else echo "*****命令执行失败*****" fi如果想使用 iptables 做规则,可以使用以下命令:iptables -t filter -A INPUT --match set --match-set test src -j ROP # 这样印度的 ip 就不能访问到你的电脑了,同时你的电脑也不能访问印度的 ip 了,因为数据包的发送时需要有接受的,虽然你请求了,但是你的电脑做了规则限制,你的电脑就接受不了这个请求包。iptables 保存配置因为 iptbales 和 ipset 重启电脑之后之前写的规则都会丢失,所有要保存重启前的规则。使用命令 iptables-save 和 ipset save 来保存规则ipset save > /etc/rulers.ipset iptables-save > /etc/ruler.iptables使用命令 iptables-restore 和 ipset restore 导入规则ipset restore < /etc/ruler.ipset iptables-restore < /etc/ruler.iptables
  • openEuler 进程以及系统监控工具
    系统进程管理进程是什么?进程(process)就是已启动的可执行程序(program)的运行实例。进程组成部分已分配内存的地址空间;安全属性,包括所有权凭据和特权;程序代码的一个或多个执行线程;进程状态。程序:二进制文件,静态 /usr/bin/passwd,/usr/sbin/useradd。进程:是程序运行的过程,动态,有生命周期及运行状态。进程分类实时进程Typora 用户交互的进程,需要及时响应。普通进程响应不需要那么及时的进程,压缩文件,视频的编码解码。上下文切换上下文切换(context switch)又称环境切换,电脑术语,是一个存储和重建 CPU 的状态,因此令多个进程(process)可以分享单一 CPU 资源的计算过程。要切换 CPU 上的进程时,必须先行存储目前进程的状态,再将欲运行的进程之状态读回 CPU 中。Nice 值nice 值越高,cpu 调度优先级越低。nice 命令# 启动一个进程并设置 nice 值 [root@openeuler ~]# nice -n 11 bash [root@openeuler ~]# [root@openeuler ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1068 1061 0 80 0 - 29070 do_wai pts/0 00:00:00 bash 4 S 0 4244 1068 0 91 11 - 29018 do_wai pts/0 00:00:00 bash 0 R 0 4257 4244 0 91 11 - 38331 - pts/0 00:00:00 ps [root@openeuler ~]# nice 11renice 命令# 使用命令 renice 修改进程的 nice 值 # 要将进程 ID 为 1234 的进程的优先级设置为 10,你可以使用以下命令 renice 10 -p 1234 # 如果要修改属于特定用户的所有进程的优先级,可以使用以下命令: renice 10 -u username # 查看进程优先级,查看 NI 一列的信息,显示的是进程的 nice 值 # NI: 进程的nice值。这是一个可以由用户调整的值,用于改变进程的优先级。一个正值的nice值将使进程优先级降低(运行更慢),而负值则使优先级提高(运行更快) ps -efl # 这个命令提供了比简单的 ps -ef 更详细的信息,包括进程ID(PID)、父进程ID(PPID)、用户ID(UID)、启动时间(STIME)、占用的CPU总时间(TIME)、终端类型(TTY)以及进程的启动命令(CMD)等。进程 fork 概念我们系统本身就是一堆进程,当系统运行时,就产生了 0 号进程,其他进程都是由 0 号进程所创建的子进程。linux 启动后,第一个进程就是 PID 为 0,通过 0 号进程 fork()出其他的进程。操作系统的运行,就是不断地创建进程,以及销毁进程。# 使用BSD语法查看系统上的每个进程,unix 操作系统下,查看进程,用如下不带短横线的参数选项 [root@openeuler ~]# ps auxf ... root 814 0.0 0.2 112900 4348 ? Ss Mar01 0:00 /usr/sbin/sshd -D root 1061 0.0 0.3 163568 6336 ? Ss Mar01 0:00 \_ sshd: root@pts/0 root 1068 0.0 0.1 116280 2948 pts/0 Ss Mar01 0:00 | \_ -bash root 4244 0.0 0.1 116204 2840 pts/0 SN 11:20 0:00 | \_ bash root 4694 0.0 0.0 155584 1936 pts/0 RN+ 15:15 0:00 | \_ ps -auxf root 1066 0.0 0.2 163264 6052 ? Ss Mar01 0:00 \_ sshd: root@notty root 1089 0.0 0.1 72252 2676 ? Ss Mar01 0:00 \_ /usr/libexec/openssh/sftp-server # 使用标准语法查看系统上的每个进程 [root@openeuler ~]# ps -ef | grep ssh root 814 1 0 Mar01 ? 00:00:00 /usr/sbin/sshd -D root 1061 814 0 Mar01 ? 00:00:00 sshd: root@pts/0 root 1066 814 0 Mar01 ? 00:00:00 sshd: root@notty root 1089 1066 0 Mar01 ? 00:00:00 /usr/libexec/openssh/sftp-server root 4728 4244 0 15:28 pts/0 00:00:00 grep --color=auto ssh小知识:当使用 ps 命令来查看进程名字,带有中括号的成为内核进程,是 linux 内核自动生成的进程,linux 所有的发行版都能看见,不带中括号,就是发行版系统生成的进程,用户来生成各种进程。进程产生执行流程:操作系统 0 号进程,0 号进程会创建出一堆内核级进程,提供操作系统运行。 ↓ linux 用户级别启动的 1 号进程 ↓ 创建子进程 sshd 进程 ↓ 用户 /bin/bash 进程 ↓ 用户执行其他命令进程孤儿进程程序运行时,生成了父亲进程,儿子进程。父亲进程突然挂了,儿子成了孤儿,被1号进程收养。儿子进程的诞生是为了执行程序,程序结束后,被 1 号进程释放,消失在了这个美丽的世界。僵尸进程僵尸进程明显比孤儿进程可怕,是有害的父进程创建出子进程后,如果子进程先挂了,父进程却不知道儿子进程挂了这件事,就无法正确送走儿子进程,没有处理它在系统中的信息,那么这个儿子进程就会变成可怕的僵尸进程,会对系统产生危害。当系统中有了僵尸进程,你可以通过 ps 命令找到它,并且它的状态是 Z(zombie)。如果系统中产生大量僵尸进程,占据了系统中大量可分配的资源,如果进程 id 号,系统就无法再正确创建新进程,完成任务,导致系统无法使用的危害。如何解决僵尸进程:1.可以主动杀死(kill)父亲进程 pid;2.如果程序会自动结束的话,比如 timesleep()时间到期。进程文件资源管理lsof(list open file)列出当前系统打开文件的工具。常用参数:-c:指定进程名称,打开了哪些系统文件-p:显示指定 pid 打开的文件-u:显示指定用户 uid 打开的文件,以及具体进程信息+d:显示文件夹下被打开的文件有哪些+D:递归列出目录下哪些文件被进程打开-n:不显示主机名,直接显示 ip-P:不显示端口名,直接显示端口号-s:列出文件大小示例:# 查看占用文件的进程 lsof /usr/sbin/sshd # 查看指定程序名,打开的文件 lsof -c sshd # 显示文件夹下被打开的文件有哪些 lsof +d /var/log # 指定 pid,查看这个进程所使用的文件 lsof -p 811结束进程的命令结束指定 pid 的进程kill语法:kill [信号] PID作用:kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作# 信号: [root@openeuler ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX 常用信号解释:SIGTERM:kill命令,不指定任何信号,默认就是这个信息,告诉程序你可以结束了。SIGKILL:强制性终止,危险的信号。SIGHUP无须关闭进程,重新加载配置文件,如 reload 操作。根据进程名杀死killallpkill# example killall vim pkill vim进程后台运行命令command &:将未启动的 command 放入当前 ssh 的后台去运行,但是当 ssh 会话【异常断开】,后台的进程就会丢失。jobs:查看后台进程列表。ctrl + z:暂停进程。bg:进程放入后台运行,和 & 一样。fg:将后台命令放入到前台运行。nohup(no hang up):用于在系统后台不挂断地运行,及时回话异常断开也不会影响程序的运行,真正的将执行的命令放入到后台运行,并且会把日志输入到当前目录中 ./nohup.out 文件中。nohup ping qq.com &监控命令1、cpu、磁盘 i/o 指标实践[root@openEuler ~]# dnf install -y stress # cpu、磁盘压力测试 [root@openEuler ~]# stress -c 2 -i 2 --timeout 300s & # 在后台模拟两个CPU核心和两个磁盘I/O线程的压力,持续300秒查看 cpu 利用率mpstat-P:显示指定 CPU 的统计信息,如“-P ALL”表示显示所有 CPU 的统计信息,“-p 1,2”表示显示第2路和第3路的 CPU 统计信息。-T:在显示中展示拓扑原色,通常和 -u 结合使用。-o:统计信息以 JSON 的格式展现。[root@openEuler ~]# mpstat -P ALL 5 2 Linux 3.10.0-1160.el7.x86_64 (openEuler) 02/28/2024 _x86_64_ (2 CPU) 08:13:50 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 08:13:55 PM all 73.50 0.00 26.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:13:55 PM 0 70.20 0.00 29.80 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:13:55 PM 1 76.65 0.00 23.35 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:13:55 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 08:14:00 PM all 73.23 0.00 26.77 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:14:00 PM 0 77.45 0.00 22.55 0.00 0.00 0.00 0.00 0.00 0.00 0.00 08:14:00 PM 1 69.00 0.00 31.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle Average: all 73.36 0.00 26.64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 0 73.83 0.00 26.17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: 1 72.83 0.00 27.17 0.00 0.00 0.00 0.00 0.00 0.00 0.00ps[root@openEuler ~]# ps -aux --sort -%cpu | head -n 4 # 列出系统中CPU使用率最高的前四条信息 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1750 74.2 0.0 7312 100 pts/0 R 20:13 0:47 stress -c 2 -i 2 --timeout 300s root 1748 64.8 0.0 7312 100 pts/0 R 20:13 0:41 stress -c 2 -i 2 --timeout 300s root 1749 29.5 0.0 7312 100 pts/0 R 20:13 0:18 stress -c 2 -i 2 --timeout 300shtoptopglances查看系统平均负载[root@openEuler ~]# uptime 18:58:02 up 16 min, 2 users, load average: 7.96, 3.12, 1.172、上下文切换指标实践# 上下文切换压测 sysbench --threads=4 --time=300 threads run & # 查看系统上下文切换 [root@openEuler ~]# vmstat 3 5 # 每隔3秒钟执行一次命令,执行五秒 procs -----------memory----+------ ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 4 0 0 1532748 2076 300088 0 0 9 4 135 236 3 8 89 0 0 4 0 0 1532748 2076 300088 0 0 0 0 2010 6480112 16 84 0 0 0 4 0 0 1532748 2076 300088 0 0 0 0 2015 6246754 17 83 0 0 0 4 0 0 1532748 2076 300088 0 0 0 0 2010 6369602 17 83 0 0 0 4 0 0 1532748 2076 300088 0 0 0 0 2009 6584834 16 84 0 0 0 [root@openEuler ~]# pidstat -w 5 2 -t | grep sysbench # cswch/s:进程每秒主动上下文切换的总数 # 主动上下文切换发生在进程堵塞时,因为进程需要的资源不可用 # nvcswch/s:进程每秒被迫上下文切换的总数 # 进程被迫上下文切换发生在 CPU 时间切换时,强制进程放弃处理器3、系统内存指标实践系统内存,工具:free、vmstat物理内存(memory)交换系统内存(swap):当内存不够用时,系统把会硬盘当做内存来使用。缓冲(buffer):buffer 是指,写入数据时,把分散的写入操作保存到内存,达到一定程度集中写入硬盘,减少磁盘碎片,以及反复的寻道时间,加速数据写入。缓存(cache):cache 是指,把读取磁盘而来的数据存在内存中,再次读取,下次就不用读取硬盘了,而直接从内存中读取,加速数据读取过程。进程内存,工具:top虚拟内存(VIRT):需要的虚拟内存驻留内存(RSE):实际使用的内存共享内存(SHR):与其他进程的共享的内存示例:# 物理内存性能压测 stress --vm 2 --vm-bytes 300M --vm-keep --timeout 300s & # 查看系统虚拟内存 [root@openEuler ~]# vmstat -a -S M 3 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free inact active si so bi bo in cs us sy id wa st 4 0 0 896 106 799 0 0 9 4 160 1303 5 9 86 0 0 2 0 0 896 106 799 0 0 0 0 2018 97 100 0 0 0 0 2 0 0 896 106 799 0 0 0 1 2019 88 100 0 0 0 0 3 0 0 896 106 799 0 0 0 25 2010 83 100 0 0 0 0 2 0 0 896 106 799 0 0 0 0 2011 81 100 0 0 0 0 # 进程内存压测 sysbench --threads=4 --time=300 threads run --timeout 300s & # 查看内存进程 top top -> M4、磁盘 i/o 指标实践磁盘 i/o 主要指标IOPS(input output per second):每秒钟磁盘能处理的读写请求数量吞吐量:每秒磁盘读写的流量示例:# 磁盘I/O读写性能压测 [root@openEuler ~]# fio -filename=/data/test.file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=test_r_w查看sarsar -d 3 3iostatiostat -dh 3 3 5、网络I/O性能指标实践网络连接状态:TCP、UDP、HTTP等响应时间:用户从发出请求到接受完响应之间的总耗时带宽:单位时间内能传输的数据量示例:# 安装网络性能测试工具iperf [root@openEuler ~]# dnf install -y iperf # 查看网络连接状态 [root@openEuler ~]# netstat -antulp # 常用选项: # -n:表示不解析服务名称,以端口号的形式呈现给你 # -l:显示监听服务器套接字 # -t:表示只列出 tcp 协议的连接 # -u:表示只列出 udp 协议的连接 # -p:表示显示进程 pid 和进程名称 Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 816/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 911/master tcp 0 0 192.168.113.31:57826 210.44.151.62:80 TIME_WAIT - tcp 0 0 192.168.113.31:57828 210.44.151.62:80 TIME_WAIT - tcp 0 0 192.168.113.31:48710 103.77.111.8:443 TIME_WAIT - tcp 0 0 192.168.113.31:36640 222.139.215.198:443 TIME_WAIT - tcp 0 36 192.168.113.31:22 192.168.113.1:60417 ESTABLISHED 2191/sshd: root@pts tcp 0 0 192.168.113.31:33214 59.69.128.21:443 TIME_WAIT - tcp 0 0 192.168.113.31:50514 101.6.15.130:443 TIME_WAIT - # 查看网络响应时间 [root@openEuler ~]# ping www.baidu.com -c 3 PING www.baidu.com (220.181.38.150) 56(84) bytes of data. 64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=1 ttl=128 time=24.9 ms 64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=2 ttl=128 time=24.5 ms 64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=3 ttl=128 time=24.6 ms --- www.baidu.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 24.552/24.699/24.932/0.210 ms # 查看网络带宽,iperf可以报告带宽、延迟抖动和数据包丢失,是排查网络问题、定位网络瓶颈的重要工具。 # 1.服务器开启服务 # 登录内网下任意一台ECS用作Server [root@Server ~]# iperf -s # —S,--server:开启 Server 模式 ----------------------------------------------------------- Server listening on 5201 (test #1) ----------------------------------------------------------- # 2.客户端测试内网带宽 [root@openEuler ~]# iperf -c 192.168.113.128 -t 20 -i 5 # -c,--client <host>:开启 Client 模式,连接到指定主机;-t,指定测试的时间;-i:指定吞吐量报告的时间间隔 ------------------------------------------------------------ Client connecting to 192.168.113.128, TCP port 5001 TCP window size: 1.14 MByte (default) ------------------------------------------------------------ [ 3] local 192.168.113.31 port 39442 connected with 192.168.113.128 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 5.0 sec 3.60 GBytes 6.18 Gbits/sec [ 3] 5.0-10.0 sec 3.79 GBytes 6.50 Gbits/sec [ 3] 10.0-15.0 sec 3.75 GBytes 6.45 Gbits/sec [ 3] 15.0-20.0 sec 3.78 GBytes 6.49 Gbits/sec [ 3] 0.0-20.0 sec 14.9 GBytes 6.40 Gbits/sec # 查看网络接口的吞吐量 [root@ansible yum.repos.d]# sar -n DEV 2 1 Linux 3.10.0-1160.el7.x86_64 (ansible) 02/28/2024 _x86_64_ (2 CPU) 11:40:11 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 11:40:13 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11:40:13 PM ens33 12663.50 570179.50 816.38 1633307.83 0.00 0.00 0.00 Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: ens33 12663.50 570179.50 816.38 1633307.83 0.00 0.00 0.00
  • [技术干货] openEuler性能测试常用工具
    前言性能是操作系统至关重要的一部分,openEuler在每个版本迭代的过程中,也十分看重性能的表现。本文将向各位介绍openEuler性能测试中常用的测试套和测试原则,希望可以帮助大家更好地理解性能测试这个重要的领域。1. 基础性能测试1.1 stream测试1.1.1 测试套介绍Stream主要对内存带宽的实际性能进行测试,支持通过copy、scale、add、triad四种运算方式测试内存带宽的性能。Copy先访问一个内存单元,读出值再写入到另一个内存单元。Scale读出一个内存单元的值,做一个乘法运算,再将结果写入到另一个内存单元。Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元。Triad将三个测试组合起来,先从内存单元中读两个值a、b,对其进行乘加混合运算(a + 因子 * b ) ,将运算结果写入到另一个内存单元。Stream会直接输出测试报告,结果简洁易读。结果Add >Trial>Copy>Scale。原因:Add 两个读操作,一个写操作,三次访问内存。Trial虽说也是三次访问内存,但操作复杂,所以带宽比Add略小,copy和scale都是两次访存,但是scale操作复杂,所以带宽比copy略小。1.1.2 几个重要的编译参数-DSTREAM_ARRAY_SIZEstream.c源码中定义了该参数的值建议范围,即大于L3 cache 的4倍。对于单个CPU,保证测试数组总大小(STREAM_ARRAY_SIZE*sizeof(double))至少是3.8倍的L3 cache size。-fopenmp该编译选项启用后,默认开启满核测试,可测试满核的内存带宽。-DNTIMES默认值为10。迭代多次,返回剔除第一次结果的最佳结果,可提高该值,增加测试结果的稳定性。1.1.3 常见影响测试套的领域编译器GCC:例如矢量化编译优化。内核:64K页表的内核下开启透明大页可导致性能衰退。硬件:测试机器的内存容量、内存频率、BIOS内存相关的配置会影响测试结果。1.2 lmbench1.2.1 测试套介绍lmbench 是一套简易可移植的,符合ANSI/C 标准为UNIX/POSIX 而制定的微型测评工具。一般来说,它衡量两个关键特征:时延和带宽。主要功能如下:带宽测评工具:读取缓存文件、拷贝内存、读内存、写内存、管道、TCP。时延测评工具:上下文切换、本地网络(连接的建立、管道、TCP、UDP等)、文件系统的创建和删除、系统调用(进程创建、信号处理等)、内存(L1、L2、main mem、rand mem)等。还可以用于测试跨node、跨片、跨die时延。测试结果输出如下:1.2.2 测试项分类系统调用时延:同类的测试套,如专测系统调用的libmicro测试套。系统调用一般涉及glibc、编译器、以及内核上的改动均可能产生性能影响。上下文切换时延:内核调度方面的影响。本地通信时延:内核网络协议栈方面的影响。文件系统及虚拟内存时延:内核文件系统、虚拟内存影响。本地带宽:内核访存、管道等方面影响。内存时延:不同层级访存影响(L1、L2、主存、随机访存)。当然除上层内核影响大,底层如BIOS、芯片对上述测试项也常有较大影响,也需关注BIOS版本、BIOS选项上的影响。1.3 netperf测试1.3.1 测试套介绍Netperf是一种网络性能的测量工具(由惠普公司开发的,测试网络栈。即测试不同类型的网络性能的benchmark工具)主要针对基于TCP或UDP的传输测试。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。Netperf测试结果所反映的是一个系统能够以多快的速度向另外一个系统发送数据,以及另外一个系统能够以多快的速度接收数据。工作原理:1.3.2 测试项分类1)STREAM类:TCP_STREAM:用来测试进行TCP批量传输TCP数据分组过程时的吞吐量。UDP_STREAM:用来测试进行UDP批量传输时的网络吞吐量。2)RR类:TCP_RR:测试对象是多次TCP request和response的交易过程,但是它们发生在同一个TCP连接中,这种模式常常出现在数据库应用中。TCP_CRR:与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。最典型的应用就是HTTP。UDP_RR:UDP_RR方式使用UDP分组进行request/response的交易过程。由于没有TCP连接所带来的负担,所以交易率一定会有相应的提升。netperf由于涉及请求的频繁发送与频繁响应,因此无论是客户端还是服务端,任何一边性能差都对测试结果有显著的影响。1.4 fio1.4.1 测试套介绍fio是一个开源压力测试工具,主要用来测试硬盘IO性能。这个工具的可定制性非常强,可以根据测试者的想法进行各种混合io测试,它支持13种不同类型io引擎(libaio、sync、mmap、posixaio、network等等)。它可以测试块设备或文件,可以通过多线程或进程模拟各种io操作,可以测试统计iops、带宽和时延等性能。当前我们通常使用异步IO引擎libaio,并结合direct=1,以绕过文件系统缓存来测试硬盘的真实IO性能。关注的指标为:IOPS和带宽。1.4.2 重点参数参数参数值解释filename设备名或文件名,如:裸设备/dev/sdb,文件/home/test.img定义测试对象,一般是设备或者文件。如果想测试裸盘设备/dev/sdb,可以设置filename=/dev/sdb;如果想要测试文件系统性能,则可以设置filename=/home/test.imgname测试名称定义测试名称。必填项,本地fio测试的名称,对性能没有影响。rw测试类型,可选值有:read,write,rw,randread,randwrite,randrw定义测试的读写类型:read-顺序读,write-顺序写,rw(readwrite)- 混合顺序读写,randread- 随机读,randwrite-随机写,randrw-混合随机读写。对于读写混合类型来说,默认读写比例为1:1rwmixwrite,rwmixread混合读写中读写占用比例,可选值为[0,100]定义在混合读写模式中,写或读所占的比例。举例来说,rwmixread值为10,则表示读写比为10:90。ioengineio引擎选择,可选值有sync、libaio、psync、vsync、mmap等定义fio如何下发io请求。sync:基本的read、write io。 libaio:linux原生的异步io,linux只支持non-buffer情况下的排队操作。默认值为psync,该模式为同步io模型,异步io模型libaio,一般结合direct=1使用。direct0或1定义是否使用direct io:值为0,表示使用buffered io;值为1,表示使用direct io。bs带单位的数字定义io的块大小,单位是k,K,m,M。默认值为4k。numjobs正整数定义测试的进程/线程数,默认值为1,如果指定了thread参数,则使用单进程多线程模式,否则使用多进程模式iodepth正整数定义每个进程/线程可以同时下发的io任务数,默认为1,适用于异步io场景,同步io场景要等前一个io任务完成才能下发下一个任务,所以iodepth并不起作用。cpu_allowed指定cpu的corefio测试的所有进程/线程可以选择的cpu核,可以是单独一个或者多个核,也可以是一个范围。1.4.3 测试项测试一般关注顺序读、顺序写、随机读、随机写、混合读写,覆盖小包例如4K,大包例如1024K。测试的硬盘通常选用NVMe SSD,文件系统采用EXT4/XFS。关注指标:IOPS和带宽BW。一般性能问题基本集中在小包,主要受内核在存储IO栈以及文件系统的性能影响。1.5 iozone31.5.1 测试套介绍iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能,可以通过 write, re-write, read, re-read, random read, random write, 等不同的模式下测试硬盘的性能。 测试的时候请注意,设置的测试文件的大小一定要大过你的内存(最佳为内存的两倍大小),不然linux会给你的读写的内容进行缓存,会使数值非常不准确。Write: 测试向一个新文件写入的性能。当一个新文件被写入时,不仅仅是那些文件中的数据需要被存储,还包括那些用于定位数据存储在存储介质的具体位置的额外信息。这些额外信息被称作“元数据”。它包括目录信息,所分配的空间和一些与该文件有关但又并非该文件所含数据的其他数据。因此,Write的性能通常会比Re-write的性能低。Re-write: 测试向一个已存在的文件写入的性能。当一个已存在的文件被写入时,所需工作量较少,因为此时元数据已经存在。Re-write的性能通常比Write的性能高。Read: 测试读一个已存在的文件的性能。Re-Read: 测试读一个最近读过的文件的性能。Re-Read性能会高些,因为操作系统通常会缓存最近读过的文件数据。这个缓存可以被用于读以提高性能。Random Read: 测试读一个文件中的随机偏移量的性能。许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,磁盘数量,寻道延迟和其他。Random Write: 测试写一个文件中的随机偏移量的性能。同样,许多因素可能影响这种情况下的系统性能,例如:操作系统缓存的大小,磁盘数量,寻道延迟和其他。1.6 unixbench1.6.1 测试套介绍UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用于测试linux系统主机的性能。Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。该测试套涉及12个测试子项,可分为以下几类:Double-Precision Whetstone:此项用于测试 string handling,因为没有浮点操作,所以深受软件和硬件设计(hardware and software design)、编译和链接(compiler and linker options)、代码优化(code optimazaton)、对内存的cache(cache memory)、等待状态(wait states)、整数数据类型(integer data types)的影响。Double-Precision Whetstone:这一项测试浮点数操作的速度和效率。这一测试包括几个模块,每个模块都包括一组用于科学计算的操作。覆盖面很广的一系列 c 函数:sin,cos,sqrt,exp,log 被用于整数和浮点数的数学运算、数组访问、条件分支(conditional branch)和程序调用。此测试同时测试了整数和浮点数算术运算。Execl Throughput:测试30秒内可以执行的 execl 系统调用的次数。execl 系统调用是 exec 函数族的一员。它和其他一些与之相似的命令一样是 execve() 函数的前端。File copy:测试10秒内从一个文件向另外一个文件传输数据的速率。每次测试使用不同大小的缓冲区。这一针对文件 read、write、copy 操作的测试统计规定时间内的文件 read、write、copy 操作次数。Pipe Throughput:测试10秒内一个进程可以向一个管道写 512 字节数据然后再读回的次数。Pipe-based Context Switching:测试两个进程10秒内通过一个管道交换一个不断增长的整数的次数。测试打开两个管道,开启两个进程,其中一个进程往管道1写,往管道2读,另一个进程往管道2写,往管道2读,一个进程完成一次读写,计数+1。Process Creation:测试30秒内一个进程可以创建子进程然后收回子进程的次数。简单地说,就是不停调用fork函数,创建进程,并立马退出,成功一次计数+1。一般说来,这个测试被用于对操作系统进程创建这一系统调用的不同实现的比较。System Call Overhead:测试10秒内反复地连续调用几个系统调用(getpid、getuid、umask等)的次数,测试进入和离开操作系统内核的代价。Shell Scripts:测试60秒内一个进程可以并发地开始一个 shell 脚本的 n 个拷贝的次数。首先通过fork函数,创建进程,不停地执行一个脚本(pgms/multi.sh), 执行成功一次+1.其中,shell1表示执行脚本内只有一个子任务执行,shell8表示,执行脚本内会同时起8个子任务并发执行。1.7 speccpu 20171.7.1 测试套介绍SpecCPU2017是一套CPU子系统测试工具,包括4大种类套件共43个基准测试。4大种类套件如下:整数型:SPECrate 2017 Integer,对应用例编号为5xx。SPECspeed 2017 Integer,对应用例编号为6xx。浮点型:SPECrate 2017 Floating Point,对应用例编号为5xx。SPECspeed 2017 Floating Point,对应用例编号为6XX。SPEC基准广泛用于评估计算机系统的性能。SPEC CPU套件通过测量几个程序(例如编译器GCC,化学程序游戏和天气程序WRF等)的运行时间来测试CPU性能。Spec2017测试有两种评估方式,分为speed和rate。speed是测试完成一项任务需要的时间,即速度测试。rate是测试单位时间内可以完成多少任务,即throughput(吞吐量测试)。speed和rate测试又分为整数(Integer)和浮点(Floating Point)测试。1.7.2 测试项分类一般来说,rate类的测试性能出问题,基本编译器影响最大(通常绑核测试,不涉及调度),而speed类由于是并发测试,涉及调度,因此性能问题一般更多与内核有关系。常见的透明大页、OpenMP参数调优、CPU幽灵漏洞、大页机制也会影响测试套性能,目前OS上的调优手段相对有限,更多还是依赖编译器的优化能力。2. 性能测试的基本原则使用同一硬盘进行测试,可挂载同一硬盘作为数据盘或使用系统盘作为数据盘(保证硬盘的参数正常)。如测试项可能受文件系统影响,还需关注测试硬盘的文件系统类型。测试使用同一主机,保持基本硬件一致。测试保证测试工具版本一致。测试需要时需记录GCC、binutils、glibc、kernel、测试工具等版本信息,文件系统类型,硬盘类型,主频,核数、内存、CPU数量与型号、内存主频等硬件配置。测试考虑是否清缓存sync && sysctl -w vm.drop_caches=3。转自:cid:link_0
  • [问题求助] 为什么设置openeuler的网络源被撤了?
    为什么设置openeuler的网络源被撤了?原来的版本首页是有的哇
  • [技术干货] OpenEuler:深入探索其安全特性
    摘要: OpenEuler作为一种专为关键业务设计的Linux发行版,其安全性是其核心优势之一。本文将深入探讨OpenEuler的安全特性,包括代码层面的安全机制、安全配置、系统更新管理、入侵检测与防御等方面,并通过代码示例来展示其安全实践。引言随着数字化转型的加速,关键业务的运行对操作系统的安全性提出了更高的要求。OpenEuler,作为一款专为关键业务打造的Linux发行版,其安全性自然成为了用户关注的焦点。本文将深入剖析OpenEuler的安全特性,通过代码示例和实际案例,帮助读者更好地理解其安全性,并探讨如何在实际业务中有效应用。OpenEuler安全概述OpenEuler在设计之初就充分考虑了安全性,其安全特性贯穿了整个操作系统。从代码层面的安全机制,到系统配置、更新管理,再到入侵检测与防御,OpenEuler都提供了全面且有效的安全措施。这些措施共同构成了OpenEuler的安全防护体系,确保系统的稳定运行和数据的安全可靠。代码层面的安全机制OpenEuler的代码库经过严格的审查和审计,确保其符合安全编程规范。在代码审查过程中,开发团队会对代码进行逐行检查,确保没有潜在的安全漏洞。此外,OpenEuler还采用了自动化的代码审计工具,对代码进行静态分析和动态检测,以发现潜在的安全问题。除了代码审查和审计,OpenEuler还注重安全编程规范的培养。开发团队遵循一系列安全编程准则,如最小化权限原则、输入验证、错误处理等,以降低安全漏洞的风险。当发现安全漏洞时,OpenEuler团队会迅速响应,进行漏洞评估和管理。他们会及时发布安全公告,提供补丁和修复方案,确保用户能够及时修复漏洞,降低安全风险。系统安全配置OpenEuler提供了默认的安全配置,以减少潜在的安全风险。例如,系统默认禁用了不必要的服务和端口,降低了遭受攻击的可能性。此外,OpenEuler还提供了安全加固建议,帮助用户进一步优化系统配置,提高安全性。遵循最小权限原则,OpenEuler在配置系统时会限制用户和服务的权限。只有必要的服务和用户才会被授予相应的权限,以减少潜在的安全风险。系统更新与补丁管理为了确保系统的安全性,OpenEuler提供了完善的系统更新和补丁管理机制。所有软件包都经过签名和验证,确保软件的完整性和真实性。在更新过程中,OpenEuler会采用增量更新的方式,只下载和安装变更的部分,提高了更新效率。同时,OpenEuler还提供了灵活的更新策略和回滚机制。用户可以根据自己的需求选择合适的更新策略,如自动更新、手动更新等。一旦更新出现问题,用户可以利用回滚机制恢复到之前的状态,确保系统的稳定运行。入侵检测与防御OpenEuler提供了强大的入侵检测与防御机制,帮助用户及时发现并应对安全事件。通过日志审计与分析,系统可以记录和分析各种事件和操作,发现异常行为。防火墙和入侵防御系统则能够阻止恶意访问和攻击,保护系统的安全。当发生安全事件时,OpenEuler会提供详细的安全事件响应机制。系统会生成安全事件报告,提供事件分析和处置建议。用户可以根据报告采取相应的措施,及时应对安全事件,降低损失。容器安全与隔离随着容器技术的广泛应用,容器安全也成为了OpenEuler关注的重点。OpenEuler提供了容器安全特性,如容器隔离、网络隔离和存储隔离等,确保容器之间的安全性和隔离性。这些特性可以防止容器之间的攻击和数据泄露,提高容器的安全性。安全工具与生态OpenEuler提供了丰富的安全工具和生态,帮助用户更好地管理和维护系统安全。安全扫描与评估工具可以帮助用户发现系统中的安全漏洞和隐患,提供修复建议。安全加固工具则可以帮助用户优化系统配置,提高系统的安全性。此外,OpenEuler还积极与第三方安全生态合作,共同打造安全可靠的操作系统环境。案例分析与安全实践通过回顾历史安全事件和分享安全实践案例,我们可以更好地了解OpenEuler在实际业务中的安全性能和应用效果。这些案例不仅可以提供宝贵的经验教训,还可以为其他用户提供参考和借鉴。结论与展望OpenEuler作为一款专为关键业务设计的Linux发行版,其安全性得到了广泛的认可和应用。通过代码层面的安全机制、系统安全配置、系统更新管理、入侵检测与防御等方面的措施,OpenEuler为用户提供了全面且有效的安全防护体系。未来,随着技术的不断发展和安全威胁的不断变化,OpenEuler将继续完善其安全特性,为用户提供更加安全可靠的操作系统环境。
  • [技术干货] openEuler 安装Nginx
     Nginx是什么?Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强,支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能,并且支持很多第三方的模块扩展。Nginx配置过程1.配置本地yum源,之前章节已配置完毕。清除缓存:dnf clean all创建缓存:dnf makecache安装服务器:dnf install nginx查看安装后的rpm包:dnf list all | grep nginx查看nginx安装位置whereis nginx4个位置分别为:程序执行文件/库文件/配置文件/share文件/usr/sbin/nginx usr/lib64/nginx etc/nginx usr/share/nginx2.跳转到/usr/sbin/ 目录,执行./nginx3.在浏览器输入服务器IP地址进行测试,若打不开关闭系统防火墙。1:查看防火状态systemctl status firewalldservice  iptables status2:暂时关闭防火墙systemctl stop firewalldservice  iptables stop3:永久关闭防火墙systemctl disable firewalldchkconfig iptables off4:重启防火墙systemctl enable firewalldservice iptables restart ​
  • [技术干货] OpenEuler基础操作
    openeuler基础操作 基本的bash命令 关机命令 shutdown 输入shutdown ,此时系统会提示将在什么时候关机  重启命令 reboot 输入reboot,按回车,此时系统会立刻重启  logout与exit 输入logout或bash,此时系统会退出登录 再次登录系统,输入bash,重新打开一个shell,输入exit,退出当前shell  openeuler基础命令操作 目录及文件命令 pwd 回显显示当前所在目录  ls 查看当前目录下的文件或目录 ls -a查看当前目录下的所有文件或目录 ls -l查看当前目录下的所有文件或目录详细信息  cd 切换目录 切换目录 cd /切换到根目录,使用pwd查看是否切换成功 cd切换到当前用户的home目录  mkdir 创建目录 mkdir test1 在当前目录下创建名为test1的目录  touch 创建文件 touch test.txt 在当前目录下创建名为test.txt的文件  cp 复制文件 复制并重命名 `cp test.txt /etc/test.txt.bak 后半部分为复制的目的路径及复制后的文件名  cp -r 复制文件夹 cp -r test1 /mnt 后半部分为复制的目的路径  rm 删除文件 rm test1.txt 删除当前目录下的test1.txt文件,回车后弹出提示是否确认删除,输入y表示同意  rm rf 强制删除目录 选项r表示删除对象是目录,选项f表示强制删除 rm rf test1 强制删除当前文件夹下的test1目录  rmdir 删除目录 rmdir /mnt/test1 删除/mnt下的test1目录  mv 剪切(移动)文件 mv /mnt/test1.txt.bak ~/test1.txt 把/mnt目录下的test1.txt.bak剪切到/root 目录下,并重命名为test1.txt  ln 创建硬连接 (硬连接相当于给源文件创建一个独立副本) ln test1.txt /mnt/test1.txt 创建test1.txt的硬连接到/mnt,并命名为test1.txt  ln -s 创建软连接 (软连接相当于windows系统的快捷方式,如果原文件删除就无法打开) ln test1.txt /mnt.test1sl.txt 创建test1.txt的软连接到/mnt,并命名为test1sl.txt  文件查看 cat 查看文件内容 cat passwd 查看当前目录下的passwd文件  head 查看文件前10行内容 head passwd 查看当前目录下的passwd文件的前10行内容 (head指令默认参数)  head -n 查看文件前n行内容 head -n 5 查看文件前5行内容,数字前面没有符号表示正数  head -n -? 查看文件除最后n行之外的内容 head -n -20 查看文件除最后20行之外的内容,数字前面的 - 表示排除  head -c 查看文件前10个字节内容 head -c 10 passwd  tail 查看文件最后10行内容 tail passwd 查看当前目录下的passwd文件的最后10行内容 (默认参数,其他参数用法和head一样)  查找命令 find 查找文件 find /etc -name passwd 查看/etc目录下的passwd文件  find -mtime 查找n天内变动过的文件 find /root -mtime -2 使用find查找/root目录下2内容动过的文件  find -size 查找目录下大于n k 的文件 find /etc -size +512k 查找/etc目录下大于512k的文件  which 查看命令的路径 which pwd 查看pwd命令的路径  whereis 查看bash的位置 whereis bash 查看bash的位置  打包和压缩 zip 压缩文件 zip passwd.zip passwd 把当前目录下的passwd文件放到pssswd.zip压缩包中  unzip解压缩 unzip passwd.zip 把passwd.zip中的文件解压缩到当前目录  使用tar工具打包 tar -cf tar1.tar * 把当前目录下的文件打包成tar1.tar文件  使用tar工具解包 tar -xvf tar/tar1.tar -C untar/ 把/tar目录下的tar1.tar解包到/untar目录中  openeuler文本编辑器 vi编辑器 vi file1 用vi打开当前目录下的file1文件 按 i 键进入插入模式,按 ESC 键退出插入模式,按:进入命令模式,常见的 命令如 q(退出)、wq(保存退出)、q!(强制退出)、wq!(强制保存退出)等  vim编辑器 vim file1 用vim打开当前目录下的file1文件  openeuler软件包管理 dnf search xxx 搜索软件包 dnf list all 列出当前配置的软件源所有的软件列表 dnf list xxx 列出特定rpm包信息 dnf info xxx 显示特定rpm包信息 dnf install -y xxx 安装软件包 dnf download xxx 下载软件包 --resolve包含下载依赖 dnf remobe -y xxx 删除软件包 
  • OpenEuler的安全性能优势
    OpenEuler的安全性能优势随着信息技术的快速发展,操作系统作为计算机系统的核心组件,其安全性越来越受到人们的关注。OpenEuler作为一款开源的Linux发行版,在安全性方面表现出色,为用户提供了稳定、可靠的系统环境。本文将详细介绍OpenEuler的安全性能优势。1. 强大的安全机制OpenEuler采用了多种安全机制来保护系统的安全,包括访问控制、强制访问控制、安全审计等。这些机制可以有效地防止未经授权的访问和恶意攻击,确保系统数据的机密性、完整性和可用性。2. 及时的漏洞修复OpenEuler社区非常注重系统的安全性,一旦发现漏洞,会立即组织专业人员进行修复,并及时发布安全补丁。用户可以通过升级系统或安装补丁来获取最新的安全修复,从而确保系统的安全。3. 严格的软件包管理OpenEuler对软件包的管理非常严格,所有的软件包在发布前都会经过严格的安全测试和审查。这可以确保用户从官方仓库安装的软件包是安全的,不会引入潜在的安全风险。4. 丰富的安全工具OpenEuler提供了丰富的安全工具,如防火墙、入侵检测系统、安全扫描工具等。这些工具可以帮助用户监控系统的安全状态,及时发现和处理潜在的安全威胁。5. 强大的社区支持OpenEuler拥有一个庞大的用户社区,社区中的成员来自世界各地,具有丰富的技术经验和专业知识。当用户在使用过程中遇到安全问题时,可以通过社区获取帮助和支持,快速解决问题。6. 灵活的定制能力OpenEuler支持用户根据自身需求进行定制,包括安全策略、访问控制规则等。这使得用户可以根据实际场景和需求来配置系统的安全性能,提高系统的整体安全性。总结OpenEuler在安全性能方面表现出色,为用户提供了稳定、可靠的系统环境。其强大的安全机制、及时的漏洞修复、严格的软件包管理、丰富的安全工具、强大的社区支持以及灵活的定制能力,使得OpenEuler成为企业和个人用户的理想选择。在未来,OpenEuler将继续致力于提升系统的安全性能,为用户提供更加安全、可靠的计算环境。
  • [技术干货] OpenEuler常用必备的Linux命令
    OpenEuler常用必备的Linux命令OpenEuler是一个开源、免费的Linux发行版,适用于各种应用场景,包括服务器、云计算、边缘计算等。在使用OpenEuler时,掌握一些常用的Linux命令是非常必要的,这些命令可以帮助用户更加高效地管理系统、监控资源、排查问题等。本文将介绍一些OpenEuler常用必备的Linux命令。1. 文件和目录操作1.1 lsls命令用于列出目录中的文件和子目录。例如,要列出当前目录下的所有文件和子目录,可以执行:ls1.2 cdcd命令用于切换当前工作目录。例如,要切换到/etc目录,可以执行:cd /etc1.3 pwdpwd命令用于显示当前工作目录的完整路径。pwd1.4 mkdirmkdir命令用于创建新的目录。例如,要在当前目录下创建一个名为testdir的目录,可以执行:mkdir testdir1.5 rmrm命令用于删除文件或目录。例如,要删除名为testfile的文件,可以执行:rm testfile2. 文本查看和编辑2.1 catcat命令用于查看文件内容。例如,要查看/etc/os-release文件的内容,可以执行:cat /etc/os-release2.2 lessless命令用于分页查看文件内容,支持上下滚动查看。less /var/log/messages2.3 vi/vimvi或vim是常用的文本编辑器,可以在命令行模式下编辑文本文件。vim /etc/hosts3. 文件压缩和解压缩3.1 tartar命令用于打包和解包文件。例如,要将当前目录下的所有文件打包成archive.tar,可以执行:tar -cvf archive.tar .3.2 gzip/gunzipgzip用于压缩文件,gunzip用于解压缩文件。例如,要压缩archive.tar为archive.tar.gz,可以执行:gzip archive.tar解压缩则执行:gunzip archive.tar.gz(注意:通常我们会直接使用tar命令的-z选项来直接处理gzip压缩,如tar -czvf archive.tar.gz .和tar -xzvf archive.tar.gz)4. 网络命令4.1 pingping命令用于测试网络连接。例如,要测试到www.example.com的连接,可以执行:ping www.example.com4.2 ifconfig/ipifconfig(在新版Linux中已被ip命令替代)用于查看和配置网络接口。例如,要查看所有网络接口的信息,可以执行:ip addr show或者旧版命令:ifconfig4.3 netstatnetstat命令用于显示网络连接、路由表、接口统计等信息。netstat -tuln5. 系统信息和监控5.1 toptop命令用于实时监控系统状态,包括CPU使用率、内存使用率、运行中的进程等。top5.2 dfdf命令用于查看磁盘空间使用情况。df -h5.3 dudu命令用于查看目录或文件的磁盘使用情况。du -sh /path/to/directory_or_file5.4 freefree命令用于查看系统内存使用情况。free -h6. 权限和所有权6.1 chmodchmod命令用于修改文件或目录的权限。chmod 755 /path/to/file_or_directory6.2 chownchown命令用于修改文件或目录的所有者和所属组。chown username:groupname /path/to/file_or_directory7. 软件包管理在OpenEuler中,软件包管理通常使用yum或dnf(取决于OpenEuler的版本和配置)。7.1 yum/dnfyum或dnf命令用于安装、更新、搜索和删除软件包。例如,要安装名为httpd的软件包,可以执行:yum install httpd # 或 dnf install httpd(注意:OpenEuler可能会默认使用其中一个包管理器,具体取决于版本和配置)总结本文介绍了一些OpenEuler中常用必备的Linux命令,包括文件和目录操作、文本查看和编辑、文件压缩和解压缩、网络命令、系统信息和监控、权限和所有权以及软件包管理。掌握这些命令可以帮助用户更加高效地管理OpenEuler系统。
  • [其他问题] openEuler 网络连接状态异常
    openeuler 版本22.03 VirtualBox 安装修改ifcfg文件后,重启网络服务 systemctl restart NetworkManager 发现ip没有变化,重启服务器后显示网络连接异常ifcfg文件配置也没问题,不知道问题出在哪里,请求指教
  • [技术干货] Linux OpenEuler(欧拉系统)无公网ip实现SSH远程连接 -转载
     欧拉操作系统(openEuler, 简称“欧拉”)是面向数字基础设施的操作系统,支持服务器、云计算、边缘openEuler是面向数字基础设施的操作系统,支持服务器、 云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的操作系统 Cpolar是一种安全的内网穿透云服务,可以将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务,是一款内网穿透软件。  下面介绍在openEuler中安装Cpolar内网穿透工具实现远程也可以ssh 连接openEuler系统使用.  1. 本地SSH连接测试 在openEuler系统上,输入ip addres查看局域网IP地址  图片请到原文查看!!! 然后测试输入局域网IP进行ssh 连接,可以看到连接成功,下面我们在openEuler中安装Cpolar工具,实现ssh远程连接访问   2. openEuler安装Cpolar openEuler是基于Linux 的系统,可以使用cpolar Linux 安装方式一键快捷安装,终端的命令界面,我们输入下面指令,如首次使用,可以在下方官网链接中注册账号!  cpolar官网地址: https://www.cpolar.com  使用一键脚本安装命令 curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash 1 向系统添加服务 sudo systemctl enable cpolar 1 启动cpolar服务 sudo systemctl start cpolar 1 关闭openEuler防火墙 sudo systemctl stop firewalld.service 1 Cpolar安装和成功启动服务后,外部浏览器上通过openEuler局域网IP加9200端口即:【http://192.168.xxx.xxx:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可   3. 配置 SSH公网地址 登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:  隧道名称:可自定义,注意不要与已有的隧道名称重复 协议:tcp 本地地址:22 域名类型:临时随机TCP端口 地区:选择China vip 点击创建   然后打开左侧在线隧道列表,查看刚刚创建隧道后生成的 ssh tcp连接的地址,这个地址就是公网连接地址,我们可以在任意设备上使用该地址进行ssh 连接   4. 公网远程SSH连接 上面在cpolar中创建了ssh 的 公网地址,接下来我们在其他设备上使用公网地址进行ssh 远程连接测试,下面我们在Windows 系统命令行进行连接,按照ssh 格式输入命令后,可以看到连接成功   同样我们使用ssh 连接工具,也可以正常连接,在工具中输入cpolar tcp 公网地址.以Secure CRT为例   我们也可以看到也是可以连接成功,这样我们一个远程ssh 地址就设置好了,无需公网IP和公网服务器即可远程openEuler系统!   小结  为了更好地演示,我们在前述过程中使用了Cpolar生成的隧道,其公网地址是随机生成的。  这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。  我一般会使用固定TCP域名,原因是我希望将地址发送给同事或客户时,它是一个固定、易记的公网地址,这样更显正式,便于交流协作。  5. 固定连接SSH公网地址 以上步骤使用的是随机临时tcp端口地址,所生成的公网地址为随机临时地址,该公网地址24小时内会随机变化。我们接下来为其配置固定的TCP端口地址,该地址不会变化,设置后将无需每天重复修改地址。  配置固定tcp端口地址需要将Cpolar升级到专业版套餐或以上。  保留一个固定tcp地址  登录cpolar官网,点击左侧的预留,找到保留的tcp地址,我们来为SSH保留一个固定tcp地址:  地区:选择China 描述:即备注,可自定义 点击保留   地址保留成功后,系统会生成相应的固定公网地址,将其复制下来   打开cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到我们上面创建的TCP隧道,点击右侧的编辑   修改隧道信息,将保留成功的固定tcp地址配置到隧道中  端口类型:修改为固定tcp端口 预留的tcp地址:填写官网保留成功的地址, 点击更新(只需要点击一次更新即可)   隧道更新成功后,点击左侧仪表盘的状态——在线隧道列表,可以看到公网地址已经更新成为了固定TCP地址和端口。   6. SSH固定地址连接测试 固定好了地址后,使用我们固定的TCP地址进行连接,可以看到连接成功,一个永久不变的固定地址就设置好了  ———————————————— 版权声明:本文为CSDN博主「小羊失眠啦.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/hsjsiwkwm/article/details/135219196 
总条数:106 到第
上滑加载中