当前位置:   article > 正文

架构师第一周作业

架构师第一周作业

1.在虚拟机安装tomcat并且部署一个服务,并且实现会话共享。

  1. #Oracle JDK的二进制文件安装
  2. [root@ubuntu200406 ~]#rz -E
  3. rz waiting to receive.**[root@ubuntu200406 ~]#ls
  4. jdk-11.0.19_linux-x64_bin.tar.gz snap
  5. [root@ubuntu200406 ~]#tar xf jdk-11.0.19_linux-x64_bin.tar.gz -C /usr/local/
  6. [root@ubuntu200406 ~]#cd /usr/local
  7. [root@ubuntu200406 local]#ls
  8. bin etc games include jdk-11.0.19 lib man sbin share src
  9. [root@ubuntu200406 local]#ln -s jdk-11.0.19/ jdk
  10. [root@ubuntu200406 local]#ls jdk
  11. bin conf include jmods legal lib man README.html release
  12. [root@ubuntu200406 local]#ls jdk/bin
  13. jar javac jcmd jdeprscan jhsdb jjs jmod jshell jstatd rmic serialver
  14. jarsigner javadoc jconsole jdeps jimage jlink jps jstack keytool rmid unpack200
  15. java javap jdb jfr jinfo jmap jrunscript jstat pack200 rmiregistry
  16. [root@ubuntu200406 local]#vim /etc/profile.d/jdk.sh
  17. #!/bin/bash
  18. export JAVA_HOME=/usr/local/jdk/
  19. export PATH=$JAVA_HOME/bin:$PATH
  20. [root@ubuntu200406 local]#. /etc/profile.d/jdk.sh
  21. [root@ubuntu200406 local]#cd
  22. [root@ubuntu200406 ~]#java -version
  23. java version "11.0.19" 2023-04-18 LTS
  24. Java(TM) SE Runtime Environment 18.9 (build 11.0.19+9-LTS-224)
  25. Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.19+9-LTS-224, mixed mode)
  26. [root@ubuntu200406 ~]#javac
  27. Usage: javac <options> <source files>
  28. ...
  29. [root@ubuntu200406 ~]#jps
  30. 3139 Jps
  31. #二进制安装 Tomcat (安装Tomcat之前先安装Java环境)
  32. [root@ubuntu200406 ~]#rz -E
  33. rz waiting to receive.**********[root@ubuntu200406 ~]#ls
  34. apache-tomcat-9.0.83.tar.gz jdk-11.0.19_linux-x64_bin.tar.gz snap
  35. [root@ubuntu200406 ~]#tar xf apache-tomcat-9.0.83.tar.gz -C /usr/local/
  36. [root@ubuntu200406 ~]#cd /usr/local/
  37. [root@ubuntu200406 local]#ln -s apache-tomcat-9.0.83/ tomcat
  38. #指定PATH变量
  39. [root@ubuntu200406 ~]#echo 'PATH=/usr/local/tomcat/bin:$PATH' > /etc/profile.d/tomcat.sh
  40. [root@ubuntu200406 ~]#. /etc/profile.d/tomcat.sh
  41. [root@ubuntu200406 ~]#echo $PATH
  42. /usr/local/tomcat/bin:/usr/local/tomcat/bin:/usr/local/jdk//bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
  43. #启动tomcat
  44. [root@ubuntu200406 ~]#startup.sh
  45. Using CATALINA_BASE: /usr/local/tomcat
  46. Using CATALINA_HOME: /usr/local/tomcat
  47. Using CATALINA_TMPDIR: /usr/local/tomcat/temp
  48. Using JRE_HOME: /usr/local/jdk/
  49. Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  50. Using CATALINA_OPTS:
  51. Tomcat started.
  52. #查看端口
  53. [root@ubuntu200406 ~]#ss -ntlp
  54. State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
  55. LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=785,fd=13))
  56. LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=846,fd=3))
  57. LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* users:(("java",pid=2314,fd=52))
  58. LISTEN 0 100 *:8080 *:* users:(("java",pid=2314,fd=43))
  59. LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=846,fd=4))

此时,打开浏览器访问:http://192.168.31.179:8080/,可以看到如下界面:

2.总结JVM内存结构和垃圾回收算法。

JVM 组成部分:

  • 类加载子系统: 使用Java语言编写.java Source Code文件,通过javac编译成.class Byte Code文 件。class loader类加载器将所需所有类加载到内存,必要时将类实例化成实例
  • 运行时数据区: 最消耗内存的空间,需要优化
  • 执行引擎: 包括JIT (JustInTimeCompiler)即时编译器, GC垃圾回收器
  • 本地方法接口: 将本地方法栈通过JNI(Java Native Interface)调用Native Method Libraries, 比 如:C,C++库等,扩展Java功能,融合不同的编程语言为Java所用

垃圾回收算法:

  • 标记-清除 Mark-Sweep
    分垃圾标记阶段和内存释放两个阶段:
    标记阶段,找到所有可访问对象打个标记。
    清理阶段,遍历整个堆 对未标记对象(即不再使用的对象)逐一进行清理。
    优点:算法简单
    缺点:标记-清除最大的问题会造成内存碎片,但是不浪费空间,效率较高(如果对象较多时,逐一删除效率也 会受到影响)
  • 标记-压缩 (压实)Mark-Compact
    分垃圾标记阶段和内存整理两个阶段:
    标记阶段,找到所有可访问对象打个标记。
    内存清理阶段时,整理时将对象向内存一端移动,整理后存活对象连续的集中在内存一端。
    优点:整理后内存空间连续分配,有大段的连续内存可分配,没有内存碎片。
    缺点:内存整理过程有消耗,效率相对低下
  • 复制 Copying
    先将可用内存分为大小相同两块区域A和B,每次只用其中一块,比如A。当A用完后,则将A中存活的对 象复制到B。复制到B的时候连续的使用内存,最后将A一次性清除干净。
    优点:没有碎片,复制过程中保证对象使用连续空间,且一次性清除所有垃圾,所以即使对象很多,收回效率也很高
    缺点:比较浪费内存,只能使用原来一半内存,因为内存对半划分了,复制过程毕竟也是有代价。

多种算法总结:没有最好的算法,在不同场景选择最合适的算法

  • 效率: 复制算法>标记清除算法> 标记压缩算法
  • 内存整齐度: 复制算法=标记压缩算法> 标记清除算法
  • 内存利用率: 标记压缩算法=标记清除算法>复制算法

3.总结安装Nexus步骤实现私有仓库

Nexus 是一个强大的 Maven 和其它仓库的管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。

下载并启动 Nexus

注意:  安装Nexus 建议内存至少4G以上

#安装JDK
[root@ubuntu20040201 ~]# apt update && apt install openjdk-8-jdk -y
[root@ubuntu20040201 ~]# java -version
openjdk version "1.8.0_392"
OpenJDK Runtime Environment (build 1.8.0_392-8u392-ga-1~20.04-b08)
OpenJDK 64-Bit Server VM (build 25.392-b08, mixed mode)
[root@ubuntu20040201 ~]# rz -E
rz waiting to receive.****
[root@ubuntu20040201 ~]# ls
nexus-3.54.1-01-unix.tar.gz  snap
[root@ubuntu20040201 ~]# ll -h nexus-3.54.1-01-unix.tar.gz
-rw-rw-rw- 1 root root 201M Dec 13 09:33 nexus-3.54.1-01-unix.tar.gz
[root@ubuntu20040201 ~]# tar xf nexus-3.54.1-01-unix.tar.gz -C /usr/local/
[root@ubuntu20040201 ~]# ls /usr/local/
bin  etc  games  include  lib  man   nexus-3.54.1-01  sbin  share  sonatype-work  src
[root@ubuntu20040201 ~]# ln -s /usr/local/nexus-3.54.1-01/ /usr/local/nexus
[root@ubuntu20040201 ~]# ln -s /usr/local/nexus/bin/nexus /usr/bin/
[root@ubuntu20040201 ~]# file /usr/local/nexus/bin/nexus
/usr/local/nexus/bin/nexus: POSIX shell script, ASCII text executable, with very long lines
#指定运行身份
[root@ubuntu20040201 ~]# vim /usr/local/nexus/bin/nexus.rc
run_as_user="root"
#查看配置文件,可以在此文件中修改端口等配置
[root@ubuntu20040201 ~]# cat /usr/local/nexus/etc/nexus-default.properties
## DO NOT EDIT - CUSTOMIZATIONS BELONG IN $data-dir/etc/nexus.properties
##
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
nexus-context-path=/
# Nexus section
nexus-edition=nexus-pro-edition
nexus-features=\
nexus-pro-feature
nexus.hazelcast.discovery.isEnabled=true
#查看JVM配置文件
[root@ubuntu20040201 ~]# cat /usr/local/nexus/bin/nexus.vmoptions
-Xms2703m
-Xmx2703m
...
#前台运行
[root@ubuntu20040201 ~]# nexus run
...
[root@ubuntu20040201 ~]# ss -ntl
State          Recv-Q         Send-Q                 Local Address:Port                   Peer Address:Port         Process         
LISTEN         0              1                          127.0.0.1:36031                       0.0.0.0:*                            
LISTEN         0              5                            0.0.0.0:873                         0.0.0.0:*                            
LISTEN         0              50                           0.0.0.0: 8081                        0.0.0.0:*                            
LISTEN         0              4096                   127.0.0.53%lo:53                          0.0.0.0:*                            
LISTEN         0              128                          0.0.0.0:22                          0.0.0.0:*                            
LISTEN         0              70                                 *:33060                             *:*                            
LISTEN         0              5                               [::]:873                            [::]:*                            
LISTEN         0              151                                *:3306                              *:*                            
LISTEN         0              128                             [::]:22                             [::]:*                            
此时就可以在浏览器中访问了:http://192.168.31.13:8081
点击【Sign in】,账号是admin,初始密码在/usr/local/sonatype-work/nexus3/admin.password文件中
[root@ubuntu20040201 ~]# cat /usr/local/sonatype-work/nexus3/admin.password
fc0a3ad3-83bf-40e7-8a49-38606663727d

输入账号密码即可登录,进来后可以重新设置密码,密码设好后,下一步选择匿名访问,

启用匿名访问将默认允许未经授权的下载,浏览和搜索存储库内容,可以通过编辑分配给匿名用户的角 色来更改匿名用户的权限。

生产建议打开匿名访问功能,无需登录就可以下载资源

配置完成:

验证默认仓库:

默认仓库有以下 type 类型:

Hosted:本地仓库,通常我们会部署自己的构件到这一类型的仓库,比如公司的第三方库

Proxy:代理仓库,它们被用来代理远程的公共仓库,如maven 中央仓库(官方仓库) 

Group:仓库组,用来合并多个 hosted/proxy 仓库,当你的项目希望在多个repository 使用资源时就 不需要多次引用了,只需要引用一个 group 即可

点击设置图标--点击【Repositories】--点击"maven-central"

Maven的仓库优化配置:

默认仓库maven-central使用国外仓库地址,可修改为如下的国内镜像地址进行加速

把Remote storage路径改成阿里云的

在Maven配置文件指定Nexus服务器地址,后续进行JAVA源码编译可以从Nexus仓库下载相关包

这个是公司内部仓库路径 http://192.168.31.13:8081/repository/maven-central/,然后把maven之前的阿里云镜像替换成公司内部仓库路径

#二进制安装Maven的镜像配置
[root@ubuntu20040201 ~]# vim /usr/local/maven/conf/settings.xml
<mirrors>
......
    <mirror>
       <id> nexus-n83</id>
       <mirrorOf>*</mirrorOf>
       <name> Nexus n83</name>
       <url> http://192.168.31.13:8081/repository/maven-central/</url>
    </mirror>
</mirrors>
#包安装Maven的镜像配置
[root@ubuntu200406 ~]# vim /etc/maven/settings.xml
<mirrors>
......
    <mirror>
       <id> nexus-n83</id>
       <mirrorOf>*</mirrorOf>
       <name> Nexus n83</name>
       <url> http://192.168.31.13:8081/repository/maven-central/</url>
    </mirror>
</mirrors>
然后就可以下载源码,进行编译了, 此时的编译就会从nexus服务器下载相关包:
[root@ubuntu200402 ~]# git clone https://gitee.com/JPressProjects/jpress.git
Cloning into 'jpress'...
remote: Enumerating objects: 111587, done.
remote: Counting objects: 100% (1681/1681), done.
remote: Compressing objects: 100% (880/880), done.
remote: Total 111587 (delta 529), reused 1161 (delta 294), pack-reused 109906
Receiving objects: 100% (111587/111587), 200.98 MiB | 12.46 MiB/s, done.
Resolving deltas: 100% (45755/45755), done.
[root@ubuntu200402 ~]# cd jpress/
[root@ubuntu200402 jpress]# ls
changes.txt  docker-build.sh     install.sh      jpress-model             jpress-web      module-page  starter-tomcat
codegen      docker-compose.yml  jpress-addons   jpress-service           LICENSE         pom.xml      upgrade.sh
doc          Dockerfile          jpress-commons  jpress-service-provider  module-article  README.md
docker       Dockerfile.build    jpress-core     jpress-template          module-form     starter
[root@ubuntu200402 jpress]# mvn clean package -Dmaven.test.skip=true
可以看到下面的显示出下载的相关包:
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号