tomcat部署、tomcat虚拟主机及tomcat多实例、tomcaty优化

news2024/12/23 19:55:27

目录

一、Tomcat概述

tomcat是什么?

什么是 servlet?

什么是 JSP?

Tomcat 功能组件结构

Container 结构分析

Tomcat 请求过程

二、Tomcat部署

1、关闭防火墙和selinux,并将Tomcat所需软件包传到/opt目录下

2、安装JDK

3、设置JDK环境变量

4、安装Tomcat,解压tomcat安装包,并将解压出来的文件复制或移动到安装目录

5、启动Tomcat

6、测试

三、Tomcat 虚拟主机配置

1、创建 kgc 和 benet 项目目录和文件

2、修改Tomcat主配置文件server.xml

3、启动服务

4、测试

四、Tomcat多实例

多实例的实现


一、Tomcat概述

Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。

Tomcat 由一系列的组件构成,其中核心的组件有三个:
(1)Web 容器:完成 Web 服务器的功能。
(2)Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
(3)JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码。

tomcat是什么?

因此 Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户。

什么是 servlet?

Servlet 是Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。

什么是 JSP?

JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用 JSP 标签在HTML网页中插入 Java 代码。标签通常以 <% 开头,以 %> 结束。
JSP 是一种 Java servlet,主要用于实现 Java web 应用程序的用户界面部分。
JSP 通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。

Tomcat 功能组件结构

Tomcat 的核心功能有两个,分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。 其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

●Connector:负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
●Container:负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑。
●Service:对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立。

Container 结构分析

每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器:
4个子容器的作用分别是:
(1)Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;
(2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
(3)Context:代表一个 Web 应用,包含多个 Servlet 封装器;
(4)Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能。

Engine、Host、Context 和 Wrapper,这四个容器之间属于父子关系。
容器 由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个 Web 应用。每个 Web 应用会有多个 Servlet 封装器。

Tomcat 请求过程

1、用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得;
2、Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应;
3、请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端。

二、Tomcat部署

在部署 Tomcat 之前必须安装好 jdk,因为 jdk 是 Tomcat 运行的必要环境。

1、关闭防火墙和selinux,并将Tomcat所需软件包传到/opt目录下

systemctl stop firewalld
setenforce 0

2、安装JDK

我的虚拟机是最小化安装,没有安装java,不是最小化安装的虚拟机,均默认安装了java,所以不是最小化安装不需要安装JDK

cd /opt

rpm -ivh jdk-8u201-linux-x64.rpm 

java -version

3、设置JDK环境变量

vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH


source /etc/profile.d/java.sh

4、安装Tomcat,解压tomcat安装包,并将解压出来的文件复制或移动到安装目录

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz

mv apache-tomcat-9.0.16 /soft/tomcat1

5、启动Tomcat

#后台启动
/soft/tomcat1/bin/startup.sh 

/usr/local/tomcat/bin/catalina.sh start    
    
#前台启动
/soft/tomcat1/bin/catalina.sh run        

也可以将tomcat加入到systemd中管理

vim /usr/lib/systemd/system/tomcat.service

[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/soft/tomcat1/bin/startup.sh
ExecStop=/soft/tomcat1/bin/shutdown.sh
Restart=on-failure
[Install]WantedBy=multi-user.target

6、测试

三、Tomcat 虚拟主机配置

一般不会是在一台服务器上运行多个 Tomcat 服务,这样会消耗太多的系统资源。此时, 就需要使用到 Tomcat 虚拟主机。

1、创建 kgc 和 benet 项目目录和文件

mkdir /soft/tomcat1/webapps/heitui

mkdir /soft/tomcat1/webapps/aaa

echo "This is heitui web page\!" > /soft/tomcat1/webapps/heitui/index.jsp

echo "This is aaa web page\!" > /soft/tomcat1/webapps/aaa/index.jsp

2、修改Tomcat主配置文件server.xml

vim /usr/local/tomcat/conf/server.xml

#添加Host配置段,并在Host配置段中添加Context配置段

<Host name="www.heitui.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Context docBase="/soft/tomcat1/webapps/heitui" path="" reloadable="true" />
</Host>

<Host name="www.aaa.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Context docBase="/soft/tomcat1/webapps/aaa" path="" reloadable="true" />
</Host>

3、启动服务

/soft/tomcat1/bin/startup.sh

4、测试

使用浏览器测试,现在windows中的hosts文件添加上配置,否则不能使用域名访问。

windows中hosts文件路径是    C:\Windows\System32\drivers\etc


四、Tomcat多实例

首先多实例的意思就是一个服务器上启用多个tomcat服务,相当于在电脑中多开几个手机模拟器一样。

这样就会出现端口冲突的问题,所以在多开tomcat服务的时候,需要将其他的tomcat的端口改掉。

tomcat使用的端口有8080,8005,8009,8443四个端口,其每个端口的意思如下:
8080:tomcat的默认端口,用于接收处理http请求的端口
8443:用于接收处理https请求的端口
8005:用于关闭tomcat的端口
8009:8009端口使用的是AJP协议,在tomcat于apache连接使用,apache通过APJ协议访问tomcatd的8009端口

多实例的实现

1、在上方部署tomcat操作中,第4步骤中,解压tomcat安装包,然后在安装目录中创建多个tomcat(tomcat1,tomcat2,tomcat3...),最后将解压出来的文件复制到多个tomcat中

cd   /soft

mkdir tomcat{1..3}

cp   -a   /opt/apache-tomcat-9.0.16   /soft/tomcat1

cp   -a   /opt/apache-tomcat-9.0.16   /soft/tomcat2

cp   -a   /opt/apache-tomcat-9.0.16   /soft/tomcat3

2、修改tomcat2和tomcat3中的主配置文件,将其端口都修改,避免端口冲突

vim /soft/tomcat2/conf/server.xml

将8005、8080、8009三个端口都修改掉,我这里就都加1了,为8006、8081、8010
 

vim /soft/tomcat3/conf/server.xml

将8005、8080、8009三个端口都修改掉,我这里就都加2了,为8007、8082、8011





3、分别在tomcat1,2,3目录中的webapps目录下创建heitui目录,并在heitui目录下创建网页文件

mkdir  /soft/tomcat1/webapps/heitui

mkdir  /soft/tomcat2/webapps/heitui

mkdir  /soft/tomcat3/webapps/heitui

echo "this is tomcat1 web page!" > /soft/tomcat1/webapps/heitui/index.jsp

echo "this is tomcat2 web page!" > /soft/tomcat2/webapps/heitui/index.html

echo "Welcome to tomcat3 page!!!" > /soft/tomcat3/webapps/heitui/index.jsp

4、在tomcat1,2,3目录中的bin目录下,修改startup.sh脚本和shutdown.sh脚本

#在startup.sh脚本和shutdown.sh脚本添加如下语句

#tomcat1中添加如下

export CATALINA_BASE=/soft/tomcat1
export CATALINA_HOME=/soft/tomcat1
export TOMCAT_HOME=/soft/tomcat1

#tomcat2中添加如下

export CATALINA_BASE=/soft/tomcat2
export CATALINA_HOME=/soft/tomcat2
export TOMCAT_HOME=/soft/tomcat2


#tomcat3中添加如下

export CATALINA_BASE=/soft/tomcat3
export CATALINA_HOME=/soft/tomcat3
export TOMCAT_HOME=/soft/tomcat3

5、启动tomcat1,2,3

6、测试

四、tomcat优化

1、配置优化

修改配置文件server.xml 文件

maxThreads(最大线程数/并发)  

processorCache(进程缓冲)  

acceptCount(等待队列数)  

enableLookups(关闭DNS反向解析)  

URIEncoding(网页字符集编码UTF-8)

maxKeepAliveRequests(长连接最大请求数)  

connectionTimeout(连接超时时间)  

compression(开启页面压缩)

2、系统内核优化

修改/etc/security/limits.conf配置文件和/etc/sysctl.conf

 

体优化的文件为/etc/sysctl.conf,后尾追加优化参数:

net.ipv4.tcp_synack_retries = 2  #参数的值决定了内核放弃连接之前发送SYN+ACK包的数量。
net.ipv4.tcp_syn_retries = 1 #表示在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_max_syn_backlog = 262144 #这个参数表示TCP三次握手建立阶段接受SYN请求列队的最大长度,默认1024,将其设置的大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的链接请求。
net.ipv4.tcp_syncookies = 1  #解决syn攻击,用于设置开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理。
 
net.ipv4.tcp_tw_reuse = 1    #参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,这对于服务器来说意义重大,因为总有大量TIME_WAIT状态的链接存在;
net.ipv4.tcp_timestamps = 1  #开启时间戳,配合tcp复用。如遇到局域网内的其他机器由于时间戳不同导致无法连接服务器,有可能是这个参数导致。注:阿里的slb会清理掉tcp_timestamps
net.ipv4.tcp_tw_recycle = 1 #这个参数用于设置启用timewait快速回收
net.ipv4.tcp_max_tw_buckets = 6000 #参数设置为 1 ,表示允许将TIME_WAIT状态的socket重新用于新的TCP链接,该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器变慢。
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1 #当服务器主动关闭链接时,选项决定了套接字保持在FIN-WAIT-2状态的时间。默认值是60秒。
net.ipv4.tcp_keepalive_time = 600 #当keepalive启动时,TCP发送keepalive消息的频度;默认是2小时,将其设置为10分钟,可以更快的清理无效链接。
net.ipv4.ip_local_port_range = 1024 65000#定义UDP和TCP链接的本地端口的取值范围。
fs.file-max=65535  #表示最大可以打开的句柄数;

3、JVM优化

在 catalina.sh 中设置 JAVA_OPTS 参数

JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/tomcat/temp/oom.hprof -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC" 

参数说明:
-server:一定要作为第一个参数,在多个CPU时性能佳

-Xms:堆内存的初始大小,是分配JVM的初始内存,默认为物理内存的1/64。一般来讲,此值设的大点,程序会启动的快一点。

-Xmx:堆内存的最大大小,是分配JVM的最大内存,默认为物理内存的1/4。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。
----------------------------------------------------
默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制。
因此建议-Xms与-Xmx设成一样的值,均设为物理内存的一半。其目的是为了避免在java每次GC(垃圾回收机制清理堆区)后需要重新调整堆的大小而浪费资源。
----------------------------------------------------

-Xmn:堆内新生代的大小,通过这个值也可以得到老生代的大小:-Xmx减去-Xmn。官方推荐配置为整个堆的 3/8。
----------------------------------------------------
●堆区进一步细化分为:新生代、中生代、老生代。
●java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。
●整个JVM堆大小 = 新生代大小 + 老生代大小 + 永久代大小
----------------------------------------------------

-Xss:设置每个线程可使用的内存大小,即栈的大小。一般情况下,设置256k就足够了,此配置将会影响此进程中并发线程数的大小。

-XX:ParallelGCThreads:配置并行收集器的线程数,即:同时有多少个线程一起进行垃圾回收。当 CPU 数量小于8,此值建议配置等于 CPU 数量。

-XX:PermSize:设置非堆内存初始值,即持久代内存大小,默认是物理内存的1/4

-XX:MaxPermSize:最大非堆内存的大小,即最大持久代内存大小,默认是物理内存的1/4
----------------------------------------------------
●非堆区内存是不会被java垃圾回收机制进行处理的,且最大堆内存与最大非堆内存的和不能超出操作系统的可用内存。
●XMX和XMS设置一样大,MaxPermSize和MinPermSize设置一样大,这样可以减轻伸缩堆大小带来的压力。
----------------------------------------------------

-XX:+HeapDumpOnOutOfMemoryError:表示当JVM发生OOM时,自动生成DUMP文件

-XX:HeapDumpPath:表示生成DUMP文件的路径

-XX:+UseParNewGC:对新生代采用多线程并行回收,缩短垃圾收集的时间

-XX:+UseConcMarkSweepGC:并发标记清除收集器,它是老年代的收集算法,缩短垃圾收集的时间

-XX:+DisableExplicitGC:禁止调用System.gc(),防止误调用gc方法导致系统的 JVM 大起大落而使系统响应时间严重降低。

-Djava.awt.headless=true:免避在 Linux/Unix 环境下 Web 网页不能正常显示图片

-XX:+CMSParallelRemarkEnabled:启用并行标记,降低标记停顿

-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0:这两个参数默认值就是这样的,表示触发FullGC时压缩堆,优化内存碎片

-XX:CMSInitiatingOccupancyFraction=70:在应用程序使用70%完内存后开始CMS垃圾收集
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1006095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 2596. 检查骑士巡视方案【数组,模拟】1448

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

【markdown】How to use markdown

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

flink-1.14.4启动报错setPreferCheckpointForRecovery(Z)v

从flink1.12升级到flink1.14&#xff0c;修改了pom.xml的flink-version&#xff0c;打包的时候发现报错&#xff1a; // 当有较新的 Savepoint 时&#xff0c;作业也会从 Checkpoint 处恢复env.getCheckpointConfig().setPreferCheckpointForRecovery(true); 于是屏蔽了这段配置…

什么样的护眼灯好?盘点五款好用的护眼台灯

随着技术的发展&#xff0c;灯光早已成为每家每户都需要的东西。但是灯光不好可能会对眼睛造成伤害是很多人没有注意到的。现在随着护眼灯产品越来越多&#xff0c;市场上台灯的选择越来越多样化&#xff0c;如何选择一个对眼睛无伤害、无辐射的台灯成为许多家长首先要考虑的问…

21.(地图工具篇)geoserver发布wms服务文字被裁剪

1&#xff1a;问题描述 Partials:当标签在瓦片边缘显示不全时&#xff0c;是否绘制。 当设置partials时为true时&#xff08;默认为false&#xff09;&#xff0c;出现以下问题&#xff08;文字被裁剪&#xff09;&#xff1a; 2&#xff1a;解决方案 设置缓冲后&#xff…

如何利用Api接口获取手机当前的网络位置信息

在移动互联网时代&#xff0c;手机定位已经成为了一个日常化的需求&#xff0c;无论是导航、社交还是打车等服务都需要获取手机的位置信息。而获取手机位置信息最基础的一步就是获取手机当前的网络位置信息&#xff0c;本文将介绍如何利用API接口获取手机当前的网络位置信息。 …

《使用 Helm 管理 Kubernetes 应用程序的最佳实践》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

职业规划就问它!海量知识与智慧,AIGC助你冲破择业迷茫

数字化时代的兴起改变了我们的日常生活和职业工作方式。科技迅猛的发展&#xff0c;尤其是人工智能的崛起&#xff0c;将我们引入了一个崭新的智能化时代。在这个时代中&#xff0c;AI被认为是从"数字时代"向"数智时代"转变的关键元素&#xff0c;引领着这…

学校安全升级,门禁管理就选它了!

门禁监控系统是一项在当今教育界日益受到重视的技术应用&#xff0c;它不仅仅是一种安全措施&#xff0c;更是一种校园管理和学生安全保障的创新方法。 在这一背景下&#xff0c;门禁监控系统成为了一种重要的解决方案&#xff0c;能够确保学生和教职员工的安全&#xff0c;提高…

融云聊天室再放大招,服务更完整、集成更便捷

9 月 21 日&#xff0c;融云直播课 社交泛娱乐出海最短变现路径如何快速实现一款 1V1 视频应用&#xff1f; 欢迎点击上方小程序报名~ 聊天室是直播、语聊房等社交泛娱乐产品的必备组件&#xff0c;它以“公屏”形态面向用户。关注【融云全球互联网通信云】了解更多 作为一个…

C#+sqlserver网上作业批改与管理系统asp.net

功能需求 3.3.1 学生部分 1&#xff1a;查看发布作业&#xff1a;以列表的形式查看教师发布的作业。 2&#xff1a;上交作业&#xff1a;学生上交教师发布的作业。 需输入作业名称及添加WORD文档地址进行作业上传。 3&#xff1a;查看已上交作业&#xff1a;以列表的形式查看…

正中优配:股票重组前最明显的特征?

股票重组是指一家公司在经过一定的调整后&#xff0c;对其股票进行重新组合和发行的进程。股票重组是一种非常常见的商业行为&#xff0c;它能够协助公司提高效率、操控成本&#xff0c;提高股价等目的。在股票重组前&#xff0c;有许多显着的特征能够协助我们了解公司的情况以…

一款释放数据价值的项目,开源了!

在大数据和 AI 的时代背景下&#xff0c;数据已经成为了重要财富&#xff0c;大到政务数据、企业核心数据&#xff0c;小到个人信息、银行卡余额&#xff0c;这些数据无一例外都是“隐私数据”&#xff0c;如果在使用和流转时发生泄漏都会造成巨大的损失。 那有没有什么方法&a…

骨传导耳机对人体有危险吗?会损害听力吗?

如果在使用骨传导耳机的时候控制好时间和音量&#xff0c;是不会对人体带来危险和造成伤害的。 下面跟大家解释一下为什么骨传导耳机对人体没有危害&#xff0c;最大的原因就是骨传导耳机不需要空气传导&#xff0c;而是通过颅骨传到听觉中枢&#xff0c;传输过程中几乎没有噪…

U8G2 各显示屏初始化过程

主函数&#xff1a;u8g2lib.h --------各显示屏初始化函数 u8g2_d_setup.c-------- 主要函数 u8g2_SetupDisplay (u8g2, u8x8_d_ist3088_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); u8x8_d_ist3088_320x240, u8x8_cad_011 对应相应的初始化函数

Linux更新g++

不同版本的g会支持不同的c标准&#xff0c;若是g标准过低会导致一些c新的标准无法使用。 比如c11出的regex就需要g 4.9以上的标准才能使用。 一般更新g需要使用一些额外的软件源&#xff0c;便于我们更新g&#xff0c;这里采用Developer ToolSet来更新g。 更新步骤 首先使用ro…

易基因: WGBS等揭示DNA甲基化调控林地草莓植株高度和果实大小的分子机制|植物发育

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 DNA甲基化影响基因组稳定性、转座子沉默和基因表达&#xff1b;它主要发生在对称CG和CHG以及不对称CHH (H A, C或T)中的胞嘧啶上。RNA介导的DNA甲基化(RNA-directed DNA methylation&am…

Containerd安装详细步骤

Containerd安装详细步骤 从k8s的1.24版本开始&#xff0c;k8s默认的容器运行时就是Containerd了&#xff0c;所以想要安装学习k8s的1.24以后的版本 都需要安装Containerd&#xff0c;废话不多说&#xff0c;请看以下安装步骤。 1、离线安装包下载地址 https://github.com/con…

Layui快速入门之第四节 按钮

目录 一&#xff1a;基本用法 二&#xff1a;不同主题的按钮 基本案例&#xff1a; 三&#xff1a;不同尺寸的按钮 基本案例&#xff1a; 四&#xff1a;按钮圆角 五&#xff1a;按钮图标 六&#xff1a;按钮混搭 七&#xff1a;按钮组合 八&#xff1a;按钮容器 一…

基于Android高校智慧公寓选房APP的设计与实现

基于Android高校智慧公寓选房APP的设计与实现 摘 要 学生宿舍选房是大学新生入学必须面临的问题。能够统计各宿舍的分配使用情况&#xff0c;清楚查看宿舍状态&#xff0c;图像化展示&#xff0c;一目了然。并与其它系统共用一个数据中心&a…