发表于: 2018-05-20 21:16:34

1 2780


今天完成的事情:

1.昨天关于使用脚本发送邮件的问题

2.task3的深度思考

3.小课堂预习


1.脚本统计,发送邮件记录

昨天的脚本发送不成功,有几个问题记录一下:

a)解封25端口

这里不是在安全组设置,在安全组设置过了以后仍然不能发送。需要在账户里解封:

这两个开的端口性质不一样:


解封以后终于不会等待了,发送邮件立即有反馈,但是仍然没有发送成功


b)开始使用的是qq邮件作为发送方,使用stmp协议发送,配置的是qq的

提示:

提示ssl,操作不安全,于是按照网上说法把 smtp.qq.com 替换为 smtp.exmail.qq.com

然后直接报错,直接乱码了:

查看sendmail的日志:

但是解决不了问题。

后来想到直接使用SMTP协议 竟然测试的通:

然后忽然想到用163试试:

直接就发送成功了(没有提示,直接反馈):


添加到脚本里:

……
   echo db响应时长 最慢: >> body.txt
   grep "UserServiceImpl开始时间${debug_log} | awk '{print $9,$10}' | sort -n | head -n >> body.txt

   read -p "是否发送邮件[y/n]: " aoso
[ -z ${aoso} ] && aoso="n"
   if "${aoso}" == "y" ] || [ "${aoso}" == "Y" ]
   then
   echo "发送邮件中……"
   mail -s 'Test mail' 0394anger@163.com < body.txt
else
   echo "没有发送邮件"

   fi

……

用的追加文本,这里可以每天生成新的记录,然后自动发送邮件。也可以在当检测到数据有异常的时候发送邮件。很方便。

执行:

直接就收到邮件了:

收到的邮件:


2.task3深度思考


1.nginx服务器有什么作用?什么叫反向代理?为什么要使用反向代理?

nginx服务器是一个高性能的HTTP和反向代理服务器,能够代理内部服务器,提供分发请求达到负载均衡。反向代理就是用代理的方式接收请求然后转发给真正的服务器,然后再把服务器的响应结果返回给请求方。使用反向代理能隐藏服务器地址,加密连接,减少服务器的压力,有效的提高服务器的工作效率和安全性。


2.什么是ssh?如何在linux服务器上从网站下载文件?
ssh是一种网络协议,用于加密网络传输,全称是Secure Shell。它可以有效的防止远程数据传输过程中信息泄露的问题,它最开始是linux上的一个程序。这点也可以看出linux的安全性很高,在linux服务器从网站上下载文件一般使用wget命令从指定的url连接下载,比如    

wget http://xxx.xxx.x.xxxx.tar.gz 而且linux也有自己的维护社区,也可以使用yum来进行安装,比如yum install xxx


3.如何写shell脚本?尝试自己编写一个简单脚本。

shell脚本也是一种编程语言,它是直接解释性的,可以在里面写linux命令,定义各种变量、参数和方法,也可以统计信息等等等等。常用的shell命令有grep,awk,sed等等。


4.tomcat、jetty、resin各容器有什么区别?如何优化这些容器配置?
三个都是web服务器,jetty是使用java写的,分模块使用,使用很简单的配置就能运行,支持的model也比较多,定制化程度高。tomcat是用的最多的服务器,它是apache鼎立支持的服务器,稳定性比较好,最新的技术和规范也比较及时。resin最大的特点是运行速度,在轻量级的javaweb领域比较受欢迎,但是它知识一个Servlet容器,所以对于它来说轻量级的web项目使用更好。

可以优化这几项:增加jvm的栈内存,优化数据连接池,线程池,配置编码/端口/项目路径等等


5..为什么要用War包发布,War包和Jar的区别是什么,tar.gz又是什么包?

war包是包含了项目的所有需求依赖,直接就能使用,解压出来就是一个web程序。jar包是java的基础封装文件,就是把code封装到一个归档文件中,没有依赖和配置,部署的时候依赖需要同时部署。tar.gz是linux下的一种压缩文件。


6.有哪些常用的云服务器公司,Linux服务器和Windows服务器的差别是什么,Linux有哪些主流的版本,不同版本之间的差别在哪里?

阿里腾讯亚马逊百度西数华为景安等等,linux服务器和windows服务器的差别很大,win有图形界面,是常用系统,用处广,漏洞多,安全性低;linux没有图形界面,基本上只有服务器使用,安全性高,性能高,只能通过命令行操作。linux主流的服务器一般是CentOs,Ubentu,ManJaro,openSUSE,RedHat等


7.常用的主流数据库有哪些,Mysql有几种安装方式?
Mysql,Oracle,SqlServer,Sybase,access等等
Windows下安装直接去官网下载安装包就可以,分64、32位
Linux下Mysql安装可以有下面几种方式,32位64位都可以:
1.通过源码安装,比较费劲
2.在官网下载好官方编译好的二进制文件,通过fxp上传到linux下安装,比如mysql-5.6.17-linux-glibc2.5-i686.tar.gz
3.通过wget下载安装

其实后面两个都一样,下载好以后使用tar -zxvf命令解压,然后配置环境变量,执行初始化,添加用户组


8.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?
第一部署文件集中在一起比较容易管理,第二习惯data一般都是部署网站的根目录

数据盘和系统盘就像是win的d盘和c盘,一般数据都不推荐放在系统盘


9.resin,tomcat和Jetty的差别是什么,最新的版本是什么,分别适合什么样的场景?
resin是servlet使用性能最好,运行速度高。tomcat兼容性强,稳定性强,适合处理多连接,企业级开发。jetty灵活性高,配置简单,适合分布式环境。resin在servlet速度较好,tomcat和jetty速度差别不大。
目前版本(2018.05.20):


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

resin配置(4.0.56版本):
resin.xml
<server-default>
 <jvm-arg>-Xms4096m</jvm-arg>
 <jvm-arg>-Xmx4096m</jvm-arg>
 <jvm-arg>-Xmn1024m</jvm-arg>
 <jvm-arg>-XX:PermSize=128m</jvm-arg>
<jvm-arg>-XX:MaxPermSize=256m</jvm-arg>
 <thread-max>1024</thread-max>
 <socket-timeout>30s</socket-timeout>
 <keepalive-max>512</keepalive-max>
 <keepalive-timeout>60s</keepalive-timeout>
</server-default>
或者unix> bin/httpd.sh -Xmn100M -Xms500M -Xmx500M
Tomcat:
要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,新添加:
# OS specific support. $var _must_ be set to either true or false.
JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
cygwin=false
Jetty(9)
在根目录的start.ini里面配置:
-Dcom.sun.management.jmxremote=true-Xmx6144m -XX:PermSize=256M -XX:MaxPermSize=1024M
还有其它配置:
-Xms6g -Xmx10g -XX:PermSize=512m -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m -Xss1m -Djava.awt.headless=true-XX:+UseParallelGC -XX:ParallelGCThreads=20-XX:+UseParallelOldGC -XX:+UseAdaptiveSizePolicy -Dorg.apache.jasper.compiler.disablejsr199=true

内存配置一般1-2G,估算的话应该先通过实时数据或者压力测试(应该是吧)调整,再根据最大占用估计内存大小


11.resin/tomcat/jetty等WEB容器的常见配置有哪些?
常见配置一个是port(端口) 一个是Context(上下文)path,也就是web项目的部署根目录

其它还有内存大小,编码和日志的配置


12.为什么要用start.sh,stop.sh,deploy.sh 来完成容器的启动,停止和部署,而不是直接用容器自带的命令?

脚本部署比较快,方便管理,能够随时部署,不消耗时间。改动方便,脚本语言可以很好的改动,比较灵活。如果使用容器自带的命令也可以,但是每个web容器都有自己的规范和配置,所以不方便管理(多项目情况下)。而且容器自带的都是自己默认的属性,更何况有的(比如jetty)还能使用java命令部署,不统一,而且依赖java运行而运行。


13.什么叫做端口号,Linux中可以有多少个端口号,端口号是怎么分配的,通常有哪些常见的端口?
端口号一般是只网络的端口,是网络上用来区分服务的端口,就好像id一样,一个端口只能被一个服务占用。比如TCP/IP协议中端口0~65535 65535也是计算机语言里的极值,在TCP、UDP协议的开头,会分别有16位来存储源端口号和目标端口号,所以端口个数是2^16-1。为了对端口进行区分,将每个端口进行了编号,这个编号就是端口号。

对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的1~1023之间的端口号。这些知名端口号由Internet号分配机构(InternetAssignedNumbersAuthority,IANA)来管理。


14.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网
内网IP+端口是本地网络内部局域网的各个服务,不连通外网
外网IP+端口是公网上的IP指向的地址里的服务,可以在任何连通网络的地方访问
域名是IP的一层外衣,只是为了方便识别IP地址。

内网因为范围小,速度快,而且安全性高,所以一般公司在不需要外部网络或者需要高度安全环境、需要保密的环境的时候使用。


15.什么时候用外网IP,什么时候用域名访问?

直接访问网络/子域名的时候使用域名访问,绑定服务器或者使用服务器内部的服务需要外部连接的时候一般都是用ip


16.怎么判断是否收到了一个Http请求,WEB容器中的Access.log是什么意思,包含哪些字段,代表什么含义,是哪里配置修改字段的。
一般是通过日志判断,如果使用nginx代理的话可以同过access.log日志去查看。access.log就是使用日志,包含了基本上所有的访问信息。nginx是在conf文件夹下的nginx.conf文件配置的:
log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for" '
           '"$request_time" $http_referer "$http_user_agent"';
具体属性如下:
$remote_addr与$http_x_forwarded_for(反向)用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200;
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;

$http_user_agent:记录客户浏览器的相关信息;


具体的status状态码信息:
200:服务器成功返回网页
403:服务器拒绝请求。
404:请求的网页不存在
499:客户端主动断开了连接。
500:服务器遇到错误,无法完成请求。
502:服务器作为网关或代理,从上游服务器收到无效响应。
503 - 服务不可用
504:服务器作为网关或代理,但是没有及时从上游服务器收到请求。
这些状态码被分为五大类:
100-199 用于指定客户端应相应的某些动作。
200-299 用于表示请求成功。
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误。 (自己电脑这边的问题)
500-599 用于支持服务器错误。 (对方的问题)
---------------------------------------------------------------------------------------------
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
201 (已创建) 请求成功并且服务器创建了新的资源。
202 (已接受) 服务器已接受请求,但尚未处理。
203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
206 (部分内容) 服务器成功处理了部分 GET 请求。
---------------------------------------------------------------------------------------------
300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
---------------------------------------------------------------------------------------------
400 (错误请求) 服务器不理解请求的语法。
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
405 (方法禁用) 禁用请求中指定的方法。
406 (不接受) 无法使用请求的内容特性响应请求的网页。
407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408 (请求超时) 服务器等候请求时发生超时。
409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。
---------------------------------------------------------------------------------------------
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。


17.为什么要使用子域访问服务器,在访问的过程中,域名解析的过程是怎么样的?

子域访问可以分担服务器压力,也可以使用不同项目。在访问域名过程中是先通过浏览器的DNS缓存查找,如果有直接解析,如果没有就在系统中查找。如果再没有就会查看host文件。要是再没有的话就向本地配置的首选dns服务器发起域名解析请求。如果再没有运营商的dns服务器就会替我们发起迭代DNS解析请求,最后通过对应的ip地址访问到对应的服务器。没有就会返回错误的状态码(都访问不到肯定是有错误响应的)


18.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
可以通过nginx的日志查看,响应时间当然是越少越好,一般都是几毫秒到二三十毫秒内差不多都是合理的。至于并发,之前并没有了解过。单线程应该也是有阻塞的,就是毕竟运行都是逻辑,逻辑被阻塞也会卡的。
1000个并发就是1000个请求同时访问,也有可能是1000个线程同时访问,差别应该就是1和1000的差别了,如果服务器不支持肯多就是卡死或者宕机了,不过现在一般的服务器都能满足这个条件,再加上nginx的负载均衡。从新浪网易都用nginx来看nginx可以支持非常多的并发。有人说能达到10万。
tomcat目前看的说法是一般300-500并发,设置内存大小后可以达到1000并发,甚至2000并发,不过也都是3000以下(社区大佬帖子里说的)。
但是国外有个帖子测试说tomcat达到了16000并发,而且还是在07年的时候……
“早在2007年,为TOMCAT设计出NIO的Filip Hanik进行过一项WEB容器的并发测试,参加测试的选手有Tomcat, Glassfish, 和Jetty,测试内容分别是1000,4000,8000和16000个并发连接(concurrent connections)。在4000个并发时,三个容器的表现都良好,但连接数量再上升的时候,Glassfish和Jetty就开始出现问题,而Tomcat还在继续工作,最后仅仅由于内存的限制,Tomcat最高支持了16000个并发连接。”
nginx没有最大可以支持5W并发… 毕竟是专门用来负载均衡的。但是一般3-4W就可能引发性能问题,而且一般不会达到这么高的并发,更何况还可以使用Nginx+Tomcat等web服务器搭建高性能的负载均衡集群,所以支持淘宝双十一也不是什么难事。

所以要在Tomcat之前配置一个Nginx,其它的web服务器也是等同的,但是tomcat比较稳定,所以一般都是使用tomcat来搭建集群的。


19.怎么查看Resin或者是Tomcat中的DB访问时间和Controller时间,有没有可能用Aop的方法自动记录Controller的时间和DB时间?Controller时间和DB时间的区别是什么,在你写的业务逻辑里,相差有多大?
Resin可以通过日志的配置来记录访问时间。
Tomcat的内部日志记录使用JULI。可以在server.xml里的<host>标签下加上 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> 配置
这是tomcat9的官方日志文档 http://tomcat.apache.org/tomcat-9.0-doc/logging.html
还有一篇介绍tomcat日志配置的博文:https://www.cnblogs.com/EasonJim/p/5411480.html

通过Aop的方法可以在Controller方法执行前后来切入记录日志。我只是使用了环绕方法切入Controller和ServiceImpl来获取访问时间。首次部署的时候不知道为什么都有1000ms以上的时间,等到第一次访问加载完以后后续访问一般都是0ms~10ms以内,至于它们之间的差距不明显,个位数ms之间的差距。


20..为什么响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?
响应时间的分布情况可以及时的获悉异常,或者获取到其它重要信息。

请求耗时一般是几个地方:1.网络波动;2.服务器db连接过多;3.服务器负载过高;4.前端页面处理;5.比较奇葩,我的第一次访问的时候耗时>1000ms 项目还是比较有问题,部署的时候时间特别长。


21.常用的性能统计命令有哪些,Top,Vmstat,free等命令都有什么用处,CPU占用率,内存使用分别代表什么含义?到什么情况下,应该产生报警信息?

统计命令(有的命令有参数,这里只是直接使用命令看情况):

1.查看内存:free


2.查看cpu: cat /proc/cpuinfo
3.查看所有端口:netstat -ntlp
4.查看监控 cpu 内存使用率:top
5.vmstat监视虚拟内存、进程、IO读写、cpu活动等:
6.pmap 查看每个进程占用内存详细情况,需要pid做参数:
7.ps和pstree 查看正在运行的所有进程
8.uptime 查看时间 启动多久 平均负载 等等
等等,其它还有许多的工具可以查看/监控信息。

内存和cpu占用率就代表了系统的负荷了,占用的越多负荷就越大。至于报警信息,我感觉应该根据情况来说。毕竟服务器和项目架构配置都不一样,75%以上就应该有提醒了,但是应该根据实际情况来算。比如网站访问量由于某些新闻突然暴增,还有平时访问量一直挺高,服务器负载也有七八十,突然就没有访问量或者访问量迅速降低这些异常情况都应该产生报警信息。如果网站平时访问量一直很平稳,服务器达到80%的负载,又或者有固定的爆发需求,比如双十一,情人节等,这种的就应该提高报警的临界点。


明天计划的事情:


1.任务3细节 脑图 总结


2.任务4预习


3.脚本优化/小课堂


遇到的问题和收获:

问题都已解决,前面已写(主要是发送邮件的问题和在web服务器里配置日志的问题)

*昨天linux服务器花屏是因为解压命令:

unzip -op RestUser.war -d ${now_path}/ROOT

把-p去掉,直接解压就不会有花屏的问题了…


1.STMP协议,linux下的sendmail服务


2.深度思考


3.linux统计命令


任务进度:


进度:任务三 已提交待审

任务开始时间:5.10

预计完成时间:5.20

是否延期:否





返回列表 返回列表
评论

    分享到