linux nginx常见问题及优化,压力测试,tomcat服务器优化
nginx常见问题
nginx优化
全局配置优化
[root@web2 nginx]# vim conf/nginx.conf
user nobody;
worker_processes 1;(与cpu核心数一致)
worker_rlimit_nofile 3000;(最大打开文件数量)
error_log /var/log/nginx.error_log info;(定义日志级别)
注意修改操作系统配置文件
[root@web2]# /etc/security/limits.conf(凡是涉及并发量的配置都要改,不改系统配置,每个worker最大并发连接数是不起作用的)
#<domain> <type> <item> <value>
#
* soft nofile 100000
* hard nofile 100000
注:
domain:可以是用户,也可以是组
type:可以是两个值 一个是soft(软限制)一个是hard(硬限制)
item:项目控制
value:值,默认值1024
item项目控制:
core -限制核心文件大小(KB)
data - 最大数据大小(KB)
fsize - 最大文件大小
memlock - 最大锁定在内存地址空间(KB)
nofile - 最大打开的文件描述符的数目
rss - 最大驻留集大小(KB)
stack - 叠最大堆栈大小(KB)
cpu -CPU最大的CPU时间(分钟)
nproc -c最大进程数
as - 地址空间的限制(KB)
maxlogins -用户登录的最大数量
maxsyslogins -最大登录系统
priority - 优先级来运行用户进程
locks - -最大数量的用户可以把文件锁
sigpending -最大数量的待处理的信号
msgqueue - 最大内存使用的POSIX消息队列(字节)
nice -优先级提高到最大值:[ 20, 19 ]
rtprio -最大实时优先级
event模块优化
max_clients=worker_processes * worker_connections
event{
worker_connections 65536;(每个worker最大并发连接数)
use epoll;
}
http模块优化
http{
server_tokens off;(不显示nginx具体版本号)
sendfile on;(提升nginx读文件性能)
tcp_nodelay on;(关闭tcp延迟发送数据)
keepalive_timeout 10;(保持连接的超时时间)
gzip on;(开压缩)
gzip_min_length 1000;(超过1000个字节以上的页面才压缩)
gizp_comp_level 4;(压缩比例,标准)
gzip_types text/plain text/css application/json application/x-javascript text/
xml application/xml application/xml+rss text/javascript;(对特定的类型压缩,次类型在/nginx/conf/mime.types里)
client_header_buffer_size 1k;(存客户端的头部信息)
large_client_header_buffers 4 4;(大请求包头部信息的缓存个数与容量,
先根据client_header_buffer分配,如果不够,再根据large值分配)
}
如果需要处理大量静态文件,
需要保持这些文件局柄为打开状态,避免后续再次打开
http{
open_file_cache max=2000 inactive=20s;(设置服务器最大缓存2000个句柄,关闭20秒内无请求的文件句柄)
open_file_cache_valid 60s;(文件句柄的有效时间是60秒,60秒后过期)
open_file_cache_min_user 5;(只有访问次数超过5次会被缓存)
open_file_cache_errors off;
}
客户端浏览器缓存数据
http{
location ~ \.(jpg|jpeg|gif|peng|css|ico|xml){
expires 30d;
}
}
[root@web2 html]# firefox http://192.168.2.200/a.jpg(测试访问)
防盗链语句:
location ~ \.(jpg|png|gif){
valid_referers none blocked www.xx.com;
if($invalid_refer){
rewrite ^/ http://www.xx.com/403.html;
}
}
none表示没有referer,也就是直接访问,比如直接在浏览器打开一个图片
blocked表示没有referer,但内容被防火墙或代理删除
server_name就是最后的域名,可以使用*.xx。com来表示二级域名
——————————————————————————————————————————————————————————
常用压力测试工具
ab:
ab -c 并发数 -n 总请求数 url
http_load:
http_load -p 并发数 -s 测试时间 url
webbench:
webbench -c 并发数 -t 测试时间 url
siege:
siege -c 并发数 -r 重复次数 url
——————————————————————————————————————————————————————————
tomcat服务器
tomcat是apache软件基金会的jakarta项目中的一个核心项目
由apache,sun和其他一些公司及个人共同开发而成
由于有了sun的参与和支持,最新的servlet和jsp规范
可以在tomcat中得到体现
java servlet
servlet是一种扩展web服务器功能的组件贵伐
为了避免这些局限性。java servlet技术产生,
他能够以一种可移植的方法来提供动态的,面向用户的内容
处理用户请求
当需要实现一个通用的服务时,可以使用或扩展有java servlet api
提供genericservlet类
httpservlet类提供额一些方法,诸如doget和dopost,
以用于处理特定于http的服务
web server本身没有计算能力不能处理动态资源请求
servl可以处理动态资源请求
常见的servl容器
IBM——》websphere
Oracle——》weblogic
apache——》tomcat
rehat——》jboos
xx——》resin
开发者一般主要开发的是servlet容器中的servlet代码
jsp
sun首先发展出servlet,其功能比较强劲,体系设计也很先进
但他输出html语句还是采用了老的cgi方式,一句一句输出
所以,编写和修改html非常不方便
后来sun推出了类似于asp的镶嵌式的jsp,把jsptag镶嵌到html语句中
简化和方便了网页的设计和修改
——————————————————————————————————————————————
安装tomcat(需要java环境)
[root@web2 ]# rpm -ivh jdk-8u77-linux-x64.rpm (java环境)
[root@web2 ]# tar apache-tomcat-8.0.30.tar.gz (解tomcat包)
[root@web2 ]# mv apache-tomcat-8.0.30 /usr/local/tomcat(移动到目录下)
[root@web2 bin]# ./configtest.sh start(启动脚本,端口为8080,不会和80端口冲突)
tomcat目录
lib:库文件目录
temp:临时目录
work:自动编译目录jsp代码转换为service
webapp:页面目录
测试访问:[root@web2 tomcat]# vim webapps/ROOT/test.jsp(在根页面下写一个jsp测试)
<html>
<body>
<center>
Now time is:<%=new java.util.Date()%>(java严格区分大小写)
</center>
</body>
</html>
[root@web2 ]# firefox http://127.0.0.1:8080/test.jsp(测试访问)
tomcat配置文件
[root@web2 tomcat]# ls conf/
server.xml:主配置文件
context.xml:每个webapp有专有的配置文件,这个为各webapp提供默认配置
web.xml:所有的webapp提供默认部署相关的配置
tomcat-users.xml:用户认证的账号和密码配置文件
catalina.properties:java属性的定义文件,用于设定类加载器路径等
logging.properties:日志相关配置文件
server.xml主配置文件框架
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>
server.xml框架解析
service是tomcat实例的顶层元素,一个tomcat实例
servlet是一个集合,他由一个或多个connector以及一个engine组成
connector是直接与用户交互的组件,负责接受用户请求和向客户返回响应结果
engine负责处理所有connector所获得的客户请求,
他处理同一个servlet中所有connector元素接收到的客户请求
它匹配请求和自己的虚拟主机,并将请求发送给对应的<Host>处理
默认的主机是localhost
一个<engine>元素可以包含多个<Host>元素,每个<Host>元素定义一个虚拟主机
它包含多个web应用
servlet.xml
port:指定服务器http端口号
address:指定连接器监听的地址,默认为所有地址
protocol:连接器使用的协议,支持http和ajp
enableLookups:是否查询客户端主机名,性能消耗严重
connectionTimeout:指定超市时间数
name:主机名
appbase:网站项目根目录
unpackWARS:是否自动解压war包
autoDeloy:tomcat启动时自动部署新项目
docBase:应用程序的路径或war包项目路径
path:web应用程序的url访问路径
测试:搭建基于域名的虚拟主机
[root@web2 tomcat]# echo "hail hydra!!" > hydra/ROOT/index.html(创建目录及页面)
[root@web2 tomcat]# vim conf/server.xml (配置文件)
<Host name="www.hydra.com" appBase="hydra" unpackWARs="true" autoDeploy="true">
</Host>
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(停止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(启动)
[root@web2 bin]# firefox http://www.hydra.com:8080(重启后测试访问)
测试给host添加context(appbase定义基础(根)目录,,基础目录下游很多项目,docbase定义首页路径)
[root@web2 tomcat]# echo "hail hydra!!" > hydra/base/index.html(创建目录及页面)
[root@web2 tomcat]# vim conf/server.xml
<Host name="www.hydra.com" appBase="hydra" unpackWARs="true" autoDeploy="true">
<Context path=""docBase="base" reloadable="true"/>
</Host>
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(停止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(启动)
测试给host添加context(appbase定义基础(根)目录,path指定用户访问的url,docbase指定页面存储位置)
[root@web2 tomcat]# mkdir -p /var/www/html(创建目录及页面)
[root@web2 tomcat]# echo "hail hydra!!" > /var/www/html/index.html
[root@web2 tomcat]# vim conf/server.xml
<Host name="www.hydra.com" appBase="hydra" unpackWARs="true" autoDeploy="true">
<Context path="/hydra" docBase="/var/www/html/"/>
</Host>
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(停止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(启动)
————————————————————————————————————————————————————————————————————————————
加密站点
[root@web2 tomcat]# mkdir ssl
[root@web2 tomcat]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/ssl/keystore(生成RSA加密算法的密钥对,保存在路劲下)
输入密钥库口令: 123456
修改servlet.xml配置文件
[root@web2 tomcat]# keytool -help(获取所有可用命令)
[root@web2 tomcat]# vim conf/server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"(监听8443端口)
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"(最大150个进程,头部信息https,允许加密,走tls路线)
keystoreFile="/usr/local/tomcat/ssl/keystore" keystorePass=123456(密钥文件路径,密钥需要输入密码,写上生成时的密码就可以)
clientAuth="false" sslProtocol="TLS" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(停止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(启动)
——————————————————————————————————————————————————————————————————————————————
tomca优化
jvm优化
[root@web2 tomcat]# vim bin/catalina.sh
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m"
server:服务器模式运行
Xms:java虚拟机初始化时的最小内存
Xmx:java虚拟机可使用的最大内存
并发量优化
修改connector属性
[root@web2 tomcat]#[root@web2 tomcat]# vim conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="1000"(客户请求最大线程)
minSpareThreads="100"(最小空闲进程)
maxSpareThreads="1000"(最大空闲线程)
enableLookups="false"
URIEncoding="utf-8"
acceptCount="1000"(监听端口队列最大数)
/>
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(停止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(启动)
——————————————————————————————————————————————————————————————————————
linux nginx常见问题及优化,压力测试,tomcat服务器优化的更多相关文章
- 高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机
一.Nginx常见问题处理 目标: 本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能: 1> 不显示Nginx软件版本号 2> 如果客户端访问服务器提示“Too many ...
- Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器
目录 Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器 crm django项目部署流程 使用supervisro启动uwsgi,退出虚 ...
- nginx优化php-fpm优化 压力测试达到每分150万访问量webbench网站压力
webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装:引用wget http: ...
- JMeter工具接口性能压力测试分析与优化
最近公司做的项目,要求对相关接口做性能压力测试,在这里记录一下分析解决过程. 压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情 ...
- 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果
nginx + fastcgi(fpm) 压力测试: CentOS release 5.9 16核12G内存 静态页面: 并发1000,压测200秒,测试结果: 系统最大负载5.47 成功响应: 25 ...
- linux上实现jmeter分布式压力测试(转)
摘要:最近根据公司工作的需求,学习了一些压力测试的知识,目前,公司使用的是jmeter进行压力测试.下面就记录下近期的学习.我想将这次的博文分成三个部分:1.开始测试前的准备(测试环境的搭建)2.在一 ...
- Nginx使用webbench进行压力测试
在运维工作中,压力测试是一项非常重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验. 但是,在压力测试中存在一个共性,那就是压力测试的 ...
- Nginx使用webbench进行压力测试(转载)
在运维工作中,压力测试是一项非常重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验. 但是,在压力测试中存在一个共性,那就是压力测试的 ...
- Linux系统上安装软件(JDK以及tomcat服务器)
一:安装jdk linux系统上面如果运行java程序,就需要安装java的运行环境(jdk) 1:下载linux版本的jdk 地址:http://www.oracle.com/technetwork ...
随机推荐
- 【转】globk通常的应用
1.重复性分析(glred) -单独的观测期 -联合的观测期 2.联合多期数据得到基于实验的平均位置 -联合单独观测的测站 3.联合平均位置估计速度或地震偏移和震后运动 卡尔曼滤波 1.等同于序贯最小 ...
- MVC登出友情提示
好奇心害死猫,话说12月30号,阳历17年末,行至小镇农户,有羊在鸣,由于好奇心泛滥,循声而至,发现一只被拴住的羊,好心喂草,不料反被舔了一口,得亏抽手及时,不然小拇指估计被咬掉,没错,是咬掉,即使如 ...
- 各模拟器adb连接端口
如果执行自动化测试,在没有真机的情况下,我们唯一的选择便是模拟器.目前市面上有很多模拟器,他们使用adb连接时都会有不同的默认接口,当adb无法自动连接模拟器时,手动使用ip+端口连接是很好的选择.下 ...
- mybatis不可忽略的细节
自我总结,欢迎拍砖! 目的:在需要返回int,long等基础类型数据的情况下,尽量在mybatis的Mapper中用基础类型的包装类. 原因:当查询的字段为空值时,mybatis会返回null,用基础 ...
- js和java中使用正则表达式校验邮箱
问题:经常在项目中要校验邮箱? 邮箱格式:首位必须为字母,必须包含一个@符号,并且@之后有个名字,之后还有个.,再有一个后缀名 例如:wyp55023@163.com 一.java中代码如下: Str ...
- 爬取西刺网的免费IP
在写爬虫时,经常需要切换IP,所以很有必要自已在数据维护库中维护一个IP池,这样,就可以在需用的时候随机切换IP,我的方法是爬取西刺网的免费IP,存入数据库中,然后在scrapy 工程中加入tools ...
- 51Nod 1225 余数之和 [整除分块]
1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ... ...
- 关于.NET C#上传大文件的解决办法
1.最近在解决问题的时候遇到如何将视频以及语音和图片上传到阿里云的服务器中.但是遇到一些大文件就导致无法进行上传. 2.在将图片进行上传到阿里云的时候先将文件转化为二进制文件,然后通过文件流 的形式进 ...
- python的面向对象和面向过程
一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...
- ajax调用handler,使用HttpWebRequest访问WCF服务
引言 随着手机及移动设备的普及,移动端的应用也进入了热潮.以前PC端的门户网站,大多也均推出了适配移动设备的网站或者APP,再差的也注册了个公众号.在移动应用开发中,目前据我所了解到的解决方案有:1. ...