![cover](https://img-blog.csdnimg.cn/7754d6a831a747e7868aa40418138f46.png)
鲲鹏devkit(迁移 测试 性能分析) & boostkit
鲲鹏devkit & boostkit
2023环境搭建
1 环境总表
毕昇jdk | 1.8.0_372-b11 | OK |
jdk | java version "1.8.0_192" | --- |
redis | 6.2.3 | |
mysql | 8.0 | |
nacos-server | v2.0.4 | |
nginx | latest | |
npm | 6.14.4 |
2 linux、docker、java -jar
- linux
- 查看Linux内核版本命令(两种方法):
cat /proc/version
(Linux查看当前操作系统内核版本信息)-
uname -a
(Linux查看版本当前操作系统内核信息)
-
获取linux操作系统详细信息:
-
cat /etc/os-release
-
cat /etc/redhat-release
-
-
修改端口
-
systemctl status firewalld:查看防火墙状态
-
systemctl start firewalld:打开防火墙
-
systemctl reload sshd:重启ssh服务
-
-
查看CPU架构:arch
-
【gpt】apt、yum、dnf的关系
-
apt
、yum
和dnf
是用于在 Linux 系统上管理软件包的包管理工具,它们有一定的关系和演变过程: -
apt
(Advanced Package Tool)是最早出现的包管理工具之一,最初用于基于 Debian 的发行版,如 Debian 和 Ubuntu。它使用.deb
扩展名的二进制软件包,通过软件源(repositories)来下载和安装软件包。 -
yum
(Yellowdog Updater Modified)是为了解决 Red Hat 系统中软件包管理问题而开发的工具。它主要用于基于 Red Hat 的发行版,如 CentOS 和 Fedora。与apt
类似,yum
也使用软件源来管理和安装软件包,但它使用.rpm
扩展名的二进制软件包。 -
dnf
(Dandified YUM)是yum
的升级版本,引入了一些改进和新特性。它是为了解决yum
的一些限制和性能问题而开发的。dnf
保留了与yum
相似的命令和选项,可以无缝地替代yum
使用。它在 Fedora 中首次引入,并成为默认的包管理工具。 -
因此,可以说
apt
和yum
是dnf
前身和衍生物。在不同的发行版中,你会发现它们的存在和使用方式略有不同,但它们都是为了方便地管理和安装软件包而设计的。
-
-
【gpt】wget
-
wget 是一个常用的命令行工具,用于从网络上下载文件。你可以使用以下命令来使用 wget:
wget [选项] [URL]
下面是一些常用的 wget 选项:
-P
或--directory-prefix
:指定保存下载文件的目录。-O
或--output-document
:指定保存文件的文件名。-q
或--quiet
:静默模式,不输出任何下载信息。-c
或--continue
:断点续传下载,如果中断过程中已经下载了部分文件,将从上次结束的地方继续下载。-r
或--recursive
:递归下载,下载指定 URL 中链接的所有文件。-np
或--no-parent
:不下载父级目录中的文件。-N
或--timestamping
:仅下载比本地文件更新的文件。-l
或--level
:指定递归下载的深度级别。--limit-rate
:限制下载速度。--user-agent
:设置用户代理标识,模拟不同的浏览器或设备。-
以下是一些 wget 的示例用法:
- 下载文件并保存为指定文件名:
-
wget -O myfile.txt https://example.com/file.txt 这将从指定的 URL 下载文件,并将其保存为
myfile.txt
。 - 后台下载文件:
wget -b https://example.com/file.txt
这将在后台进程中下载文件,你可以继续执行其他命令。
- 递归下载整个网站:
- wget -r https://example.com/
-
这将递归下载指定 URL 中链接的所有文件,并保存在本地文件系统中。
这只是 wget 的一些常见用法示例,还有更多选项和功能可以供你探索。你可以通过运行
man wget
命令来查看完整的 wget 手册,其中包含了更详细的使用说明和示例。注意,在使用 wget 下载文件时,请确保遵守法律法规,并尊重版权和知识产权。
-
- 查看Linux内核版本命令(两种方法):
-
docker
-
docker ps
-
CONTAINER ID: 容器 ID
-
IMAGE: 使用的镜像。
-
COMMAND: 启动容器时运行的命令。
-
CREATED: 容器的创建时间。
-
STATUS: 容器状态。
-
PORTS:容器的端口信息和使用的连接类型(tcp\udp)
-
0.0.0.0:80->8080/tcp
-
四部分:IP地址、主机端口、容器端口和传输协议。
-
IP地址默认为0.0.0.0,表示容器对外开放端口的IP地址为所有可用的地址;
-
主机端口则表示主机上连接容器的端口;
-
容器端口表示容器内部的端口;
-
传输协议可以是TCP或者UDP。
-
-
-
NAMES: 容器名
-
-
docker run --help
docker run --help
-d, --detach=false 指定容器运行于前台还是后台,默认为false
-i, --interactive=false 打开STDIN,用于控制台交互
-t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
-u, --user="" 指定容器的用户
-a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
-w, --workdir="" 指定容器的工作目录
-c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
-e, --env=[] 配置信息
-m, --memory="" 指定容器的内存上限
-P, --publish-all=false 随机暴露容器的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主机名
-v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
--volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
--cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
--cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
--cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
--device=[] 添加主机设备给容器,相当于设备直通
--dns=[] 指定容器的dns服务器
--dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
--entrypoint="" 覆盖image的入口点
--env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
--expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
--link=[] 指定容器间的关联,使用其他容器的IP、env等信息
--lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
--name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
--network="bridge" 容器网络设置:
bridge 使用docker daemon指定的网桥 默认
host //容器使用主机的网络,不需要使用-p发布端口绑定。容器没有其他的虚拟网络
container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
none 容器使用自己的网络(类似--net=bridge),但是不进行配置
--privileged=false 指定容器是否为特权容器,特权容器拥有所有root权限
--restart="no" 指定容器停止后的重启策略:
no:容器退出时不重启
on-failure:容器故障退出(返回值非零)时重启
always:容器退出时总是重启
--rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
--sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
--
env MODE=standalone
:通过env
语法设置了一个名为MODE
的环境变量,并将其值设置为standalone
。--log-opt max-size=<size>
:设置单个日志文件的最大大小。可以使用单位:k
(千字节)、m
(兆字节)或g
(千兆字节)。例如,--log-opt max-size=10m
表示每个日志文件的最大大小为10兆字节。--log-opt max-file=<number>
:设置保留的日志文件的最大数量。当达到最大数量后,旧的日志文件将被循环利用。例如,--log-opt max-file=3
表示最多保留3个日志文件。--log-opt compress
:启用日志压缩。当启用后,旧的日志文件将以压缩格式进行存储,以节省磁盘空间。--log-opt tag=<tag>
:为容器的日志添加自定义标签。这对于在日志中区分来自不同容器的日志非常有用。--log-opt labels=<key>=<value>
:为容器的日志添加自定义标签,类似于tag
参数。可以指定多个键值对,用逗号分隔。--log-opt syslog-address=<address>
:将容器的日志发送到指定的syslog服务器地址。地址可以是IP地址、主机名或Unix套接字。--log-opt syslog-facility=<facility>
:指定syslog日志的设施(facility)。设施用于标识使用syslog进行日志记录的应用程序类型,如auth
、daemon
、kern
等。-itd
是将多个参数合并在一起使用的简写形式。这些参数用于在Docker容器中创建一个交互式的、后台运行的终端会话。下面是对每个参数的解释:-i
:保持标准输入(stdin)打开,允许你向容器发送输入。-t
:分配一个伪终端(pseudo-tty),使得在容器中可以进行交互式操作。-d
:使容器以守护进程(daemon)方式运行,即在后台运行而不阻塞当前终端。结合使用这三个参数,
docker run -itd
命令可以创建一个运行在后台的容器,并提供一个可与之交互的终端。
-
- java -jar
- -jar:是Java命令的一个选项,用于指定要执行的Java应用程序是一个打包成可执行JAR文件的应用程序。通过使用
-jar
选项,你无需手动指定要执行的主类,而是让JVM自动从JAR文件的清单中读取。 -server
是Java命令的一个选项,用于指定以服务器模式运行Java虚拟机(JVM)。- -classpath 或 -cp:指定要加载类文件的路径或JAR文件的路径。
- -Xmx:设置Java堆的最大内存大小,例如-Xmx1g表示将堆的最大内存设置为1GB。
- -Xms:设置Java堆的初始内存大小,例如-Xms512m表示将堆的初始内存设置为512MB。
- -Xss:设置每个线程的堆栈大小,例如-Xss256k表示将堆栈大小设置为256KB。
- -XX:ParallelGCThreads:设置并行垃圾收集器使用的线程数。
- -XX:+UseConcMarkSweepGC:启用并发标记-清除垃圾收集器。
- -XX:+PrintGCDetails:打印详细的垃圾收集器信息。
- -XX:MaxPermSize:设置永久代(Permanent Generation)的最大内存大小,该参数在Java 8及更高版本中已被废弃,取而代之的是-XX:MaxMetaspaceSize。
- -XX:MaxMetaspaceSize:设置元空间(Metaspace)的最大内存大小。
- -XX:NewRatio是Java虚拟机(JVM)的一个参数,用于设置新生代与老年代内存大小的比例。
- -D<property>=<value>:设置系统属性,可以通过System.getProperty()方法在Java代码中获取这些值。
- -verbose:class:打印加载的类信息。
-Duser.timezone
是Java命令的一个系统属性选项,用于设置Java应用程序的默认时区。- ruoyi-gateway.jar > gateway.log 2>&1:将Java程序的标准输出和标准错误都写入到
gateway.log
文件中
- -jar:是Java命令的一个选项,用于指定要执行的Java应用程序是一个打包成可执行JAR文件的应用程序。通过使用
3 环境搭建
(1)安装docker
# 创建docker配置目录
mkdir /etc/docker
# 创建配置文件
tee /etc/docker/daemon.json <<-'EOF'
{
"debug": true,
"storage-driver": "overlay2",
"storage-opts":["overlay2.override_kernel_check=true"],
"graph":"/opt/docker",
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
EOF
# 使用镜像源安装docker
dnf install docker
# 启动docker
systemctl start docker
# 开机自动启动
systemctl enable docker
# 查看docker版本信息
docker info
报错:Failed to download metadata for repo ‘docker-ce-stable‘: Cannot download repomd.xml
参考:【bobo测有效】【openEuler】安装Docker-云社区-华为云 (huaweicloud.com)
(2)安装docker-compose
dnf install docker-compose
参考:
openEuler安装docker | 远方的灯塔 - 专注于服务端技术分享 (terwergreen.com)
(3)毕昇JDK安装(非docker)
第一步:获取软件包
https://support.huaweicloud.com/ug-hgcc-kunpengdevps/kunpenghgcc_06_0004.html
https://www.hikunpeng.com/developer/devkit/compiler/jdk
第二步:上传到软件包到home目录下
毕昇JDK安装:
将 bisheng ----.tar.gz 压缩包解压缩:tar -zxvf bisheng-jdk
第三步:配置环境变量
vi /etc/profile
export JAVA_HOME=/home/bisheng-jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
第四步:使环境变量生效
source /etc/profile
第五步:查看安装结果
Java -version
安装参考:UOS系统安装 毕昇JDK和GCC for OpenEuler_鲲鹏_华为云论坛 (huaweicloud.com)
(4)mysql 8(docker)
- docker pull mysql:8.0:拉取mysql 8.0
- docker images:查看本地所有的镜像
- 启动mysql服务运行容器:
docker run
-itd #创建一个运行在后台的容器,并提供一个可与之交互的终端。
--name mysql #容器名称
--restart always #总是重启
--privileged=true #指定容器是否为特权容器,特权容器拥有所有root权限
-p 3306:3306 #端口映射
-e MYSQL_ROOT_PASSWORD=MySQL#567890 #配置信息
-v /data/ruoyi/mysql:/var/lib/mysql #目录挂载【注】目录不用事先创建好,自动的
mysql:8.0???docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=MySQL#567890 -v /data/ruoyi/mysql:/var/lib/mysql mysql:8.0
- docker ps:列出启动容器
- docker ps -a: 列出所有的运行过的容器
- 工具连接,测试(crud)成功,刷入自己的sql文件
(5)redis 6.2.3(docker)
- docker ps -a
- docker kill redis
- docker rm redis
- docker pull redis:6.2.3:拉取redis 6.2.3
- docker images:查看本地所有的镜像
- 创建宿主机的" mkdir /etc/redis "目录,把对应版本的redis.config文件放到其中:
- 把最后一行注释去掉(针对ARM64系统)
- 把绑定的ip地址改成:
bind 0.0.0.0
- 启动redis服务运行容器:
docker run
--restart=always #指定容器停止后的重启策略
--log-opt max-size=100m #设置单个日志文件的最大大小。
--log-opt max-file=2 #设置保留的日志文件的最大数量。
-p 6379:6379 #指定容器暴露的端口
--name redis #指定容器名字,后续可以通过名字进行容器管理
-v /etc/redis/redis.conf :/etc/redis/redis.conf #给容器挂载存储卷【注】前面是宿主机目录
-v /data:/data #给容器挂载存储卷,挂载到容器的某个目录
-d redis:6.2.3 redis-server /etc/redis/redis.conf #加载外部自定义配置启动redis容器
--appendonly yes # 在容器执行redis-server启动命令,并打开redis持久化配置
连接容器
--requirepass Redis#567890 ???
亲测有效:docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v /etc/redis/redis.conf:/etc/redis/redis.conf -v /data:/data -d redis:6.2.3 /usr/local/bin/redis-server /etc/redis/redis.conf --appendonly yes --requirepass Redis#567890
磨嘉国-备份:docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v /data/app/prj/redis/conf/redis.conf:/etc/redis/redis.conf -v /data/app/prj/redis/data:/data -d redis:6.2.3 redis-server /etc/redis/redis.conf --appendonly yes --requirepass Redis#567890
- docker ps:列出启动容器
- docker ps -a: 列出所有的运行过的容器
- 工具连接,测试(crud)成功
- 错误1:docker中启动redis,报错:Fatal error, cant open config file_fatal error, can't open config file
-
错误2:Warning: Could not create server TCP listening socket ::1:6379: bind: Cannot assign requested address:
bind 0.0.0.0
bind 0.0.0.0
ignore-warnings ARM64-COW-BUG
(6)nacos-server 2.0.4(docker)
亲测有效:2.0.3,如下图
亲测有效:2.0.4,如下图
参考一:docker拉取arm版本nacos并运行 如何拉取特定架构amd64、arm64、aarch64的容器镜像
//第一种 找不到自动拉取
docker run --name hello-nacos -e MODE=standalone -p 8848:8848 -d zill057/nacos-server-apple-silicon:2.0.3
//第二种先拉取再运行
docker pull zhusaidong/nacos-server-m1:2.0.3
docker run --name nacos -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m -p 8848:8848 -p 9848:9848 -d zhusaidong/nacos-server-m1:2.0.3
参考二:ARM下不行
docker pull nacos/nacos-server:先拉取最新的nacos
docker run
-it
-d #指定容器运行于前台还是后台,默认为false
-p 8848:8848 #指定容器暴露的端口
-p 9848:9848 #指定容器暴露的端口
--env MODE=standalone #通过env
语法设置了一个名为MODE
的环境变量,并将其值设置为standalone
。
-e TZ=Asia/Shanghai #配置信息
--name nacos #容器名称
nacos/nacos-server:latest:启动最新版本
无效:参考:华为云服务器下 Docker 安装 Nacos最新版并配置数据库
# 先拉取最新的nacos
docker pull nacos/nacos-server
# 运行容器
docker run -it -d -p 8848:8848 -p 9848:9848 --env MODE=standalone --restart=always --privileged=true -e TZ=Asia/Shanghai --name nacos nacos/nacos-server:latest
备份-磨嘉国
docker run -it -d -p 8848:8848 -p 9848:9848 --env MODE=standalone -e TZ=Asia/Shanghai --name nacos nacos/nacos-server:latest
(7)nginx laster(docker)
docker run
--name nginx #容器名称
-v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf #给容器挂载存储卷录
-v /etc/nginx/default.conf:/etc/nginx/conf.d/default.con f#给容器挂载存储卷
-v /etc/nginx/picture:/usr/share/nginx/html/picture #给容器挂载存储卷,挂载到容器的某个目录
-p 9899:9899 #指定容器暴露的端口
-d nginx:latest #安装最新的nginx
报" 500循环 ":再加一个 -v 前端存放的路径:/usr/share/nginx/html/dist
报" 403权限不足 ":给dist目录(及子目录和文件 )777权限,chmod -R 777 dist
亲测有效:
docker run --name nginx -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf -v /etc/nginx/default.conf:/etc/nginx/conf.d/default.conf -v /etc/nginx/picture:/usr/share/nginx/html/picture -v /etc/nginx/dist:/usr/share/nginx/html/dist -p 9899:9899 -d nginx:latest
磨嘉国-备份:
docker run --name prjnginx -v /data/app/prj/nginx/nginx.conf:/etc/nginx/nginx.conf -v /data/app/prj/nginx/default.conf:/etc/nginx/conf.d/default.conf -v /data/app/prj/picture:/usr/share/nginx/html/picture -p 9899:9899 -d nginx:latest
nginx.conf
worker_processes 1;
events {
#user 1024;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 9899;
server_name 173.51.12.37;
charset utf-8;
client_max_body_size 15m;
location / {
root /usr/share/nginx/html/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
error_page 405 =200 http://$host$request_uri;
}
location /con/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://173.51.12.37:9900/;
}
location /dev-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For &proxy_add_x_forwarded_for;
proxy_pass http://173.51.12.37:9900/;
}
location /statics{
alias /usr/share/nginx/html/picture;
autoindex on;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
default.conf
server {
listen 9899;
listen [::]:9899;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
(8).jar文件启动命令
nohup java
-jar #是Java命令的一个选项,用于指定要执行的Java应用程序是一个打包成可执行JAR文件的应用程序。通过使用-jar
选项,你无需手动指定要执行的主类,而是让JVM自动从JAR文件的清单中读取。
-server #Java命令的一个选项,用于指定以服务器模式运行Java虚拟机(JVM)。
-Xms1024m #设置Java堆的最大内存大小
-Xmx1024m #设置Java堆的初始内存大小
-XX:NewRatio=15 #Java虚拟机(JVM)的一个参数,用于设置新生代与老年代内存大小的比例。
-XX:SurvivorRatio=8 #Java虚拟机的一个参数,用于设置 Eden区与 Survivor区内存大小的比例。
-Duser.timezone=GMT+8 #Java命令的一个系统属性选项,用于设置Java应用程序的默认时区。
ruoyi-gateway.jar > gateway.log 2>&1 #将Java程序的标准输出和标准错误都写入到gateway.log
文件中
& #后台运行
nohup java -jar -server -Xms1024m -Xmx1024m -XX:NewRatio=15 -XX:SurvivorRatio=8 -Duser.timezone=GMT+8 ruoyi-gateway.jar > gateway.log 2>&1 &
(9)前端部署
- vue.config.js:修改访问IP
- 前端运行:若依官网
# 进入项目目录 cd ruoyi-ui # 安装依赖 npm install # 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。 npm install --registry=https://registry.npmmirror.com # 本地开发 启动项目 npm run dev
- 前端打包:npm run build:prod
(9)后端部署
- nohup java -jar -server -Xms1024m -Xmx1024m -XX:NewRatio=15 -XX:SurvivorRatio=8 -Duser.timezone=GMT+8 ruoyi-gateway.jar > gateway.log 2>&1 &
3 环境搭建 —— 视频平台
(1)安装依赖环境
-
redis docker安装同上 RedisDesktopManager 6.2.3
-
yum install jdk1.8 java -version 1.8.0_352
-
yum install maven mvn -v 3.5.4(可省略上一步,因安装maven时会帮安装jdk)
-
yum install git git --version 2.27.0
-
yum install nodejs node -v v12.22.11
-
yum install npm npm -v 6.14.16
(2)编译运行 wvp-GB-pro
- mkdir wvp:创建放源码的目录
- git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git:下载源码
- 编译静态页面
- cd wvp-GB28181-pro/web_src/
- npm --registry=https://registry.npm.taobao.org install
- npm run build
- 编译如果报错, 一般都是网络问题, 导致的依赖包下载失败
编译完成后在src/main/resources下出现static目录
- 打包项目, 生成可执行jar
- cd wvp-GB28181-pro
- mvn package
- 编译如果报错, 一般都是网络问题, 导致的依赖包下载失败
编译完成后在target目录下出现wvp-pro-x.x-xxxxxxxx.jar
4 修改源
(1)基础知识
- 在Linux中,“源”指的是软件包的来源或存储库。
- 软件包管理器(如apt、yum、dnf等)从“ 源 ”那里获取软件包。
(2)案例分析1:wsl ubuntu上部署视频平台所必需的wvp-pro-assist(云端录像)使用科大源
(3)案例分析2:华为老马(鲲鹏比赛)
华为老马:
@小波Transformers 你先按照这个操作,不行我再接手,我可能要到明天 了
https://bbs.huaweicloud.com/forum/thread-98091-1-1.html
华为老马最终:yum 源得了,我跑一下脚本看看
华为老马参考:
openEuler 20.03 LTS
# 执行以下命令
# 不想下载的话,用这个命令直接写repo吧
cd /etc/yum.repos.d/
sudo curl -L -O https://mirror.iscas.ac.cn/mirror/openEuler-20.03-LTS-os.repo
sudo dnf makecache
#添加 OS 软件源
openEuler 20.03 LTS SP1
#执行以下命令
cd /etc/yum.repos.d/
sudo curl -L -O https://mirror.iscas.ac.cn/mirror/openEuler-20.03-LTS-SP1-os.repo
sudo dnf makecache
openEuler 20.03 LTS
#执行以下命令
cd /etc/yum.repos.d/
sudo curl -L -O https://mirror.iscas.ac.cn/mirror/openEuler-20.03-LTS-os.repo
sudo dnf makecache
参考:
在华为云openEuler安装docker ce出错_迁移调优实践_鲲鹏_华为云论坛 (huaweicloud.com)
[技术干货] 配置OpenEuler的网络yum源_华为云论坛
(4)案例分析3:华为老马
老马:
我通过了你的朋友验证请求,现在我们可以开始聊天了
斯蒂芬的本质欲望:
斯蒂芬的本质欲望:
哥,这个怎么解决?
斯蒂芬的本质欲望:
斯蒂芬的本质欲望:
老马:
换个yum源看看
斯蒂芬的本质欲望:
斯蒂芬的本质欲望:
按照这个文档跑了,不行:https://bbs.huaweicloud.com/forum/thread-98091-1-1.html
斯蒂芬的本质欲望:
老马:
手动配置一下,应该是下载有问题
老马:
cat openEuler.repo看看
斯蒂芬的本质欲望:
老马:
对呀,这个文件没得
斯蒂芬的本质欲望:
去哪里下?
老马:
https://forum.openeuler.org/t/topic/768/8
斯蒂芬的本质欲望:
放到刚刚那个位置哦
老马:
老马:
建一个openEuler.repo 复制这个内容进来
斯蒂芬的本质欲望:
是在这个目录吗:/etc/yum.repos.d
老马:
对,在这个目录下
斯蒂芬的本质欲望:
斯蒂芬的本质欲望:
斯蒂芬的本质欲望:
安装不了docker
成功,OK【自己,最后改成】【牙:或换成清华大学的源,像中科大、清华的源都是比较稳定的】
5 OpenEuler开放端口
最近使用 OpenEuler 部署项目,发现防火墙放通端口的方法找不到,因此在这里记录:
[root@localhost Porting-advisor_2.5.RC1_linux-x86-64]# firewall-cmd --query-port=8084/tcp --permanent
no
[root@localhost Porting-advisor_2.5.RC1_linux-x86-64]# firewall-cmd --add-port=8084/tcp --permanent
success
[root@localhost Porting-advisor_2.5.RC1_linux-x86-64]# firewall-cmd --reload
success
[root@localhost Porting-advisor_2.5.RC1_linux-x86-64]# firewall-cmd --query-port=8084/tcp --permanent
yes
OpenEuler 防火墙放通端口 (以 8084 为例)-阿里云开发者社区 (aliyun.com)
一 devkit
1 业务:不同环境下的开始、测试、部署、迁移、监控项目
2 需求:x86服务器、x86处理器、复杂指令集迁移到鲲鹏服务器、鲲鹏处理器、简洁指令集。调试调优。
3 解决方案:
(1)功能“集”:
- 开发
- 代码迁移工具
- 鲲鹏开发框架
- 高效迁移,极简开发
-
编译调试
-
编译调试插件
-
鲲鹏亲和性能更高
-
-
编译调试
-
编译调试插件
-
鲲鹏亲和性能更高
-
-
调优&诊断
-
性能分析工具
-
全面分析,精准诊断
-
(2)“神”冰箱:鲲鹏一站式全流程开发套件devkit
4 完成学习
(1)思想、思路、体系组织,原理,流程:一站式开发套件
(2)重:迁移:扫描快、检出全、指导精、构建易
- 分析扫描
- 知道迁移工作的工作量(时间)
- 多少文件需要修改
- 需要哪些依赖库
- 源代码迁移
- 可以对常用的语言进行快速扫描
- 针对某一语言,在两个不同的指令集架构上的差异点给扫描出来
- 对比:
- devkit:提供修改和优化建议,甚至一键替换
- 从工:差异找不全,找出来 也不知道怎么改
- 剩下的就是把代码进行编译,就可以把项目变成适配鲲鹏服务器的软件了。
- 软件包重构:针对于软件包模式的
- 扫描x86下的依赖包(如rpm包、jar包)
- 点击一键重构,可以把x86下的包,修改成适配鲲鹏的包
- 拿到修改后的包,就可以拿到鲲鹏服务器上安装并把项目跑来了呀。
- 专项软件迁移:针对一些专项项目(大数据、web、跨性能计算软件等类型项目)
- 社区下载包
- 基于鲲鹏模式进行一键盘编译、迁移,得到一个适配鲲鹏服务器的包
(3)重:加速库:"零"开发、高性能,平均提供10%+
- 切换到鲲鹏服务器(ARM、简单指令集)后,有一引起手段可以立即快速提高软件的性能。
- 鲲鹏加速库,针对了一些常用的包、库、软件进行无偿加速。
- 使用方法:使用鲲鹏加速库等以后,可以立即快速提高软件的性能。
(4)重:编译:在鲲鹏平台上翻译出性能更佳的机器指令
- 3种编译器,确保在鲲鹏上有很好的性能效果
- 毕生编译器:LLVM
- 毕异JDK:基于open jdk
- 鲲鹏GCC:GCC开发
(5)重:调优(性能分析):精准分析、全面调优,软硬件融合释放最佳性能
- 像上面的“加速库、编译器”,就是加入相应的工具(库)就马上有效果了。
- 而“调优”则是动态来分析和提升软硬件性能的工具。
- 系统性能优化:收集处理器、硬件的性能指标。图形化。优化建议。3大模块8个功能。
- JAVA性能优化:java虚拟机调优(GC、堆、线程锁)。
(6)纲:ExaGear:低成本完成x86无源码应用的快速迁移。
- 无源码
- 老版本的软件,找不到源码。
5 Devkit亮点:助力开发者高效完成应用迁移与调优
(1)入门简单:不改变开发者习惯,快速上手。两种模式。
- 两种模式:
- IDE模式。装插件即可使用所有功能。
- web浏览器模式。套件部署在自己服务端,用户可以通过浏览器来访问服务器地址。通过界面操作,使用所有功能。
(2)自动化:迁移内容自动识别,汇编代码自动翻译
(3)高效:代码修改建议自动生成,开发效率倍增
(4)便捷:(IDE)远程调测,提供更便捷的调测能力
- IDE+插件使用所有功能、完成所有工作
- 编码、上传、编译、调测
(5)可视:全场景性能分析可视,性能瓶颈一目了然、调优尽在掌握
6 DevKit案例
(1)基于DevKit打造性能最优的MSP平台
(2)基于鲲鹏DevKit提升气象预测性能150%
7 Devkit使用手册
(1)获取鲲鹏Devkit开发套件、帮助资料获取方式
- 社区:https://www.hikunpeng.com/developer/devkit
- 论坛:https://bbs.huaweicloud.com/forum/forum-928-1.html
- 自由发贴
- 提问,会有华为开发人员跟踪,并保证在两小时内有回复
- 以前人,经验总结、优秀事件
- 步骤
- 鲲鹏社区-官网丨凝心聚力 共创行业新价值
- 开发者
- 第1步:鲲鹏开发套件DevKit
- 每个工具都有下载链接
- 每个工具都有详细的安装教程
- 最佳实践,可用来学习
- 第1步:鲲鹏开发套件DevKit
- 学习
- 在线课程,快速学习如何使用
- 文档
- 各个工具的文档都有,能够提供更详细的工具使用说明
- 开发者
- 鲲鹏DevKit_鲲鹏_开发者论坛-华为云论坛
- 上面已经发布有上千个贴子了
- 有很多优化的案例、实践
- 提问。会快速回复解答。
- 鲲鹏社区-官网丨凝心聚力 共创行业新价值
(2)迁移工具:VS Code版本
0、第零步:有Demo代码
1、第一步: 扫描。右击(code菜单)对代码进行代码扫描,看看代码有没有问题。如果有问题,根据建议把代码修改好,然后经过编译、调试就可以放到鲲鹏服务器上跑起来了。
(1)点击“新建源码分析任务”:
(2)登录代码迁移工具 :
(3)点击“开始分析” :
(4)扫描结果展示(如下,代码有一些问题,修改过后才能在鲲鹏上跑起来)
- “与架构相关的依赖文件”:
- x86架构下的依赖库,修改成arm架构下的依赖库。下载链接。下载、安装即可。
- “需要迁移的源码文件”:
- 代码中不适配鲲鹏环境的一些代码语句(点)
- 点击那些“点”,跳到具体的代码行
- 根据建议进行修改,如依赖华为自己的高性能库(GitHub - kunpengcompute/AvxToNeon: Encapsulate the frequently used AVX instructions as independent modules to reduce repeated development workload.)
- Quick fix:快速修复
- 替换成建议代码
- 在本文件中应用该类修改
(3)加速工具:VS Code版本
- 推荐加速库
- 函数名:可以使用鲲鹏加速库中的函数进行代替
- 鲲鹏加速库。下载链接。下载。
- 函数名:可以使用鲲鹏加速库中的函数进行代替
(3)性能工具:VS code模式
(4)性能工具:web模式
- 把性能工具安装在鲲鹏服务器端
- ip port登录
- 点击“系统性能分析”
- 有案例参考链接
- 指导文档链接
- 向专家求助
- 步骤:
- 创建一个工程
- 对工程创建一系列的任务
- 点击“java性能分析”
- cpu
- GC
- 锁
- 进程
- 线程
- 内存
8 经分二期案例
(1)第一步:环境部署
Mysql : | root / MY_sql#567.890 |
Redis: | Re_Dis#567.890 |
Minio: | jfadmin / Jf_Admin#567.890 |
nginx: | /usr/local/nginx/ |
openJdk/jdk8 | jdk8 |
(2)(不)第二步:idea + 鲲鹏插件
安装idea插件:
(3)第三步:迁移(https://173.28.11.4:8085/porting/#/login
,portadmin,123456@a)
- 安装web模式下的kunpeng devkit迁移工具:安装-安装鲲鹏代码迁移工具-用户指南-鲲鹏代码迁移工具-鲲鹏开发套件-文档首页-鲲鹏社区 (hikunpeng.com)
- 扒下23服务器上经分二期的jar包:bas-admin.jar
- 本地PC访问web模式下的kunpeng devkit迁移工具
(4)第四步:性能分析
- 安装web模式下的kunpeng devkit性能分析工具:安装-安装-用户指南-鲲鹏性能分析工具-鲲鹏开发套件-文档首页-鲲鹏社区 (hikunpeng.com)
(5)第五步:兼容性测试工具
- 先把在线报告那个测试插件安装上去先:工具安装步骤_鲲鹏通用_兼容性测试工具用户指南(基于TaiShan服务器)_环境配置和工具安装_华为云 (huaweicloud.com)
# 待测试应用软件进程名称,多个应用名称以逗号隔开。
# 可通过ps或者docker top 命令CMD所在列查找后台进程名称, Kubernetes集群环境下填写Pod名称。
application_names=bas-admin.jar
# 待测试应用软件启动命令,多个应用的启动命令以逗号隔开。
start_app_commands=nohup java -jar /home/bas/bas-admin.jar &
# 待测试应用软件停止命令,多个应用的停止命令以逗号隔开。
stop_app_commands=/home/bas/jf.sh stop
# 被测应用软件的压力测试工具启动命令。
start_performance_scripts=
# Kubernetes集群填写"Y"。其他环境可置空。
kubernetes_env=
(6)第六步:毕晟jdk
openjdk8:vi /etc/profile
export PATH=/opt/aarch64/compiler/gcc-10.3.1-2022.06-aarch64-linux/bin:$PATH
export INCLUDE=/opt/aarch64/compiler/gcc-10.3.1-2022.06-aarch64-linux/include:$INCLUDE
export LD_LIBRARY_PATH=/opt/aarch64/compiler/gcc-10.3.1-2022.06-aarch64-linux/lib64:$LD_LIBRARY_PATH
毕晟jdk:vi /etc/profile
$ cd /path/to/jdk
$ export JAVA_HOME=`pwd`
$ export PATH=$JAVA_HOME/bin:$PATH
$ export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使配置文件立即生效
source /etc/profile |
(7)测试报告在线生成平台
注册华为ID:
二 boostkit
三 参考
鲲鹏开发套件插件工具(IntelliJ)(旧文档)
鲲鹏DevKit:鲲鹏平台代码迁移利器|QCon_文化 & 方法_(访问)
鲲鹏开发套件_搜索_哔哩哔哩-bilibili(B站视频)
沙箱实验:通过鲲鹏开发套件实现Java代码迁移_哔哩哔哩_bilibili(B站视频)
鲲鹏DevKit:从“应用迁移”走向“原生开发”,开发效率提升50% (各个阶段)
代码迁移工具关键特性与实战演示 ()案例演示、提供下载链接代码迁移工具关键特性与实战演示 ()
鲲鹏代码迁移工具基础知识 (迁移:输入、分析处理、输出)
体验代码迁移工具的极致效率(语言支持跨平台,运行环境OK即可)
四 其它
- 获取linux操作系统详细信息:
-
cat /etc/os-release
-
cat /etc/redhat-release
-
-
查看CPU架构:arch
-
项目经理
-
看视频教学,快速看一遍
-
下工具
-
对照文档操作
-
自己项目的代码 或 官网提供的demo代码,进行操作
-
有问题,在论坛发贴,必定快速响应
-
-
华为云账号:p18878791425 123456@a
-
web模式迁移工具:https://173.28.11.4:8084/porting/#/login portadmin 123456@a
-
web模式性能分析工具:https://173.28.11.4:8086/user-management/#/login tunadmin 123456@a
集群与架构:(1)逻辑 (2)物理(3)11
自己理解:
关:【关联、对比】
疑:【疑问,如预习、工作疑问】
重:【实现技术,工具】
难:【感想、体会、领悟】 【总结、归纳、规律】
大道至简:提纲(系统化、宽度、至少是视频标题)图表短
更多推荐
所有评论(0)