发表于: 2022-06-29 19:45:18

1 546




42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?


shell简介

       在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。

它类似于DOS下cmd.exe。它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。

作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;

作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。


Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。


Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。


Linux系统性能配置常用命令脚本

1、系统查看命令

# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量


2、资源/硬盘占用情况

# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载

3、磁盘和分区情况

# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况

4、网络查看

# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息

5、进程查看

# ps -ef # 查看所有进程
 # top # 实时显示进程状态

6、用户查看

# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务

7、系统服务情况

# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务

8、程序查看

# rpm -qa # 查看所有安装的软件包


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?


Web服务器一般指网站服务器,我们常见的www服务器最为网络上最常见的web服务器,

作为网民上网时向浏览器发出一些请求的一种程序。web服务器同时是一种比较被动的程序,只有你在上网的时候发出指令,这时服务器才会响应。


web服务器的种类

Web服务器经常使用的是Apache和Internet两种。

常见的Web 服务器有MicrosoftInternet Information Service(IIS)、Apache、Netscape Web Server 等。访问和获取 WWW 信息的程序是客户机,

通常称为浏览器,如 Microsoft nternet Explorer(IE)、Netscape Navigator 等。


WEB服务器的概念,一般指的是网站服务器,也就是我们打开的各种网站的数据来源,他实际上是服务器上运行的应用程序,

这个程序通过HTTP协议与游览器等客户端进行通信,把网页展现给用户。


web服务器的工作原理(B/S)其实并不复杂,我们一般打开网页一般包括三个步骤打开游览器地址栏中输入地址,

游览器通过HTTP协议向服务器发起GET(获取)请求。服务器收到请求后,将网页代码返回给游览器。游览器收到请求后,

按照规则对HTML进行解释,并显示为网页。web服务器和大多数服务器一样都是后台运行的,

游览器器可以解释并显示很多种数据类型如纯文本构建的HTML超文本标记语言。有些数据类型需要其他服务或者程序的支持所以可能要下载不同的插件。


配置Web服务器,就是在服务器上建立网站,并设置好相关的参数,至于网站中的网页应该由网站的维护人员制作并上传到服务器中,

这个工作不属于配置服务器的工作。 一般在安装操作系统时不默认安装IIS,所以在第一次配置Web服务器时需要安装IIS。



IIS是缩写,全称Internet Information Services ( IIS,互联网信息服务 ),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。

IIS是指World Wide Web server服务,IIS是一种Web(网页)服务组件,专业的说,IIS可以赋予一部主机电脑一组以上的IP地址,

而且还可以有一个以上的域名作为Web网站。. 做过服务器配置的都应该知道IIS. . 

制作好了网站怎么才能让别人浏览,就是通过网站服务器来实现的。IIS只是网站服务器的一种而已。


简单来说:

Internet Information Service(IIS)是windows开设web网页服务的组件,用来搭载网站运行程序的平台的。还能提供FTP,SMTP等服务。


他们的差别是什么,你觉得哪种方式更好?


你们需要 docker 编排和 k8s 这种东西。放一个容器,supervisor 一挂全部挂。另外水平扩展也是一起扩,

反而没有体现 docker 的优势,轻量虚拟化和资源隔离,升级版本也简单

当然是一个容器一个应用了,docker 如果发现了你的容器进程退出了,可以帮你自动重启。

但是如果多个放在一个 container 里面,如果非主线程退出了,你完全不知道,docker 也不会认为你的容器有问题。


结论:

一个容器一个服务


原因:

一个容器多个服务,即自带初始化数据或者多个服务的高定制容器

1.不利于维护

2.不方便修改初始化数据

3.会造成重复服务


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?



一、什么是Tomcat

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,

由Apache、Sun 和其他一些公司及个人共同开发而成。

由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。

因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。


二、什么是Jetty

Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,

它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,

可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。


三、什么是Resin

Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,

性能也比较优良,resin自身采用JAVA语言开发。

Resin提供了最快的jsp/servlets运行平台。在java和javascript的支持下,Resin可以为任务灵活选用合适的开发语言。

Resin的一种先进的语言XSL(XML stylesheet language)可以使得形式和内容相分离。 如果您选用jsp平台作为internet商业站点的支持,

那么速度、价格和稳定性都是要考虑到的,resin十分出色,表现更成熟,很具备商业软件的要求。



Tomcat默认可以使用的内存为128MB

jetty和tomcat分配的内存大小都是“-Xms512m –Xmx2048m”。




-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?


tomcat的常见配置:

用配置详解. 1 目录结构

. /bin:脚本文件目录。

. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载)。

. /conf:存放配置文件,最重要的是server.xml。

. /logs:存放日志文件。

. /server/webapps:来管理Tomcat-web服务用的。

. 仅对TOMCAT可见,对所有的WEB APP都不可见(使用Catalina类加载器加载)。

. /shared/lib:仅对所有WEB APP可见,对TOMCAT不可见(使用Shared类加载器加载)



配置内存大小

 修改bin/catalina.bat中的set CATALINA_OPTS=-Xms64m -Xmx128m。

 Xms指最小内存,Xmx指最大内存。



通过配置文件修改Tomcat端口号
首先:Tomcat端口号默认使用的是8080端口,没有修改的情况下都是8080
我们可以通过server.xml文件修改Tomcat的端口号

<Connector port="8080" protocol="HTTP/1.1"
          connectionTimeout="20000"
          redirectPort="8443"
  URIEncoding="UTF-8"/>



 Logger(表示日志,调试和错误信息)标签

 className:指定logger使用的类名,此类必须实现org.apache.catalina.Logger接口。

 prefix:指定log文件的前缀。

 suffix:指定log文件的后缀。

 timestamp:如果为true,则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt。


置Log4j日志记录

 项目中抛出的异常,抛到tomcat中的异常会被tomcat记录下来,存放至logs/localhost.yyyy-MM-dd.log文件中。

 平时我们在项目中使用的log4j记录日志跟tomcat是没有任何关系的,是独立的一个程序,记录的文件是自定义的。

 我们可以在tomcat中定义一个log4j的公共日志处理方式,这样在项目中就不需要在定义log4j的配置了。

 1)将log4j-1.2.15.jar加入到commonlib目录。

 2)将log4j.properties加入到commonclasses目录。

 内容例如:

 # Output pattern : date [thread] priority category - message

 log4j.rootLogger=DEUBG, stdout, logfile

 

 log4j.appender.stdout=org.apache.log4j.ConsoleAppender

 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

 log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

 

 log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender

 log4j.appender.logfile.File=${catalina.home}/logs/tomcat_app.log

 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

 log4j.appender.logfile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

 

 #3rd party library level

 log4j.logger.org.hibernate.cache=ERROR

 

 注意:我们项目中使用e.printStackTrace();输出的异常会在控制台输出来,但是,不会记录到tomcat日志中。

 而且,也不会记录到log4j的日志中。要想记录到log4j日志中,必须使用log4j输出来。

 所以,实际上web项目中进行异常处理应该将e.printStackTrace();写写法多改成log4j的形式才对!

 但是,实际项目中很多项目多偷懒使用了e.printStackTrace();方式输出异常。当出现异常的时候在控制台上查看一下就可以了,

  也不考虑实际运行时候的维护。假如有人不小心关了控制台,那么,你不就看不到异常了吗?

  个人介意使用log4j的形式记入web异常!





Jetty目录剖析

bin:可执行脚本文件
demo- base:
etc:Jetty模块定义的XML配置文件的目录
lib:Jetty依赖的库文件
logs:Jetty的日志目录
modules:Jetty的模块
resources:外部资源配置文件的目录
webapps:项目WAR文件的目录
还需要关心根目录下的一个文件:start.d(Wondows系统是start.ini文件),它定义了Jetty的活动模块。


 jetty默认端口是8080,修改端口号也很简单,首先进入到jetty服务器安装目录下会看到start.ini配置文件,

这里就是jetty启动时加载的配置,其中包括要加载的模块,超时时间配置还有这里的端口号等

  首先执行 vim start.ini 打开配置文件,找到jetty.http.port这一个配置项,默认情况下是注释且为8080,

现在去掉注释修改为自定义的端口号即可,比如

   jetty.http.port=8888 

## Connector host/address to bind to
# jetty.http.host=0.0.0.0

## Connector port to listen on
jetty.http.port=8888




Resin4启动默认有三个端口:

  • watch dog 用的6600 (配置文件里没有)
  • Http端口:8080 (对应app.http)
  • Server监听端口: 127.0.0.1:6800 (对应app_servers )

说明:单个Resin不管同时配置几个应用,每次启动Resin之后,只会启动一个WatchDog监听,kill掉WatchDog后,所有的实例都会停止,WatchDog运行中,kill掉某个实例后,该实例会自动重启。

经验证:只要WatchDog在运行中,修改server端口,不需要重启resin。

 

 自定义端口(resin.properties)

  resin.properties中修改server端口  

app_servers      : 127.0.0.1:6801

  resin.properties中修改http端口   

app.http : 8081

  resin.xml中修改WatchDog

<server-multi id-prefix="app-" address-list="${app_servers}" port="6800">
    <watchdog-port>6601</watchdog-port></server-multi>


服务器上resin.conf的日志配置一般是:

 《stdout - log path=” log /stdout. log ” timestamp=” [%Y-%m-%d %H:%M:%S] ” rollover-size=”200mb” /》

 《stderr -log path=”log/stderr.log” timestamp=” [%Y-%m-%d %H:%M:%S] ” rollover-size=”200mb” /》





收获:以上


明天计划:完成任务二的深度思考





返回列表 返回列表
评论

    分享到