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 ...
随机推荐
- 快速用Markdown排版一篇文章
前言 如果想先看下效果可以参见鄙人使用Markdown的排版的一篇文章--Markdown编辑效果. 本文会将每个设置在文内做示例. 本文不介绍完整的Markdown用法. 本文只简洁的介绍,使用Ma ...
- python绘制图形(Turtle模块)
用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. from turtle import ...
- c# HTTP技术
种植头发能完全成活吗?头发上出现了掉落,头发变细等情况下是需要去看看是不是皮下的毛囊出了问题,要解决这个头发脱发上,选择植发的方式能有效改善,不过也不要小看这个头发脱发,脱发后如果不加以做好毛发护理, ...
- I/O模型简述
1. 前言 最近在学习 Java NIO 方面的知识,为了加深理解.特地去看了 Unix/Linux I/O 方面的知识,并写了一些代码进行验证.在本文接下来的一章中,我将通过举例的方式向大家介绍五种 ...
- Golang时间格式化
PHP中格式化时间很方便,只需要一个函数就搞定: date("Y-m-d H:i:s") 而在Golang中,用的是"2006-01-02 15:04:05"这 ...
- 【OCR技术系列之三】大批量生成文字训练集
放假了,终于可以继续可以静下心写一写OCR方面的东西.上次谈到文字的切割,今天打算总结一下我们怎么得到用于训练的文字数据集.如果是想训练一个手写体识别的模型,用一些前人收集好的手写文字集就好了,比如中 ...
- snowflake分布式唯一id c#实现
snowflake算法 snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID.其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心, ...
- Eclipse的调试功能的10个小窍门[转]
原文链接:http://www.importnew.com/6164.html 你可能已经看过一些类似“关于调试的N件事”的文章了.但我想我每天大概在调试上会花掉1个小时,这是非常多的时间了.所以非常 ...
- 洛谷 [P2765] 魔术球问题
贪心做法 每次尽可能选择已经放过球的柱子 #include <iostream> #include <cstdio> #include <cstring> #inc ...
- BZOJ 3669: [Noi2014]魔法森林 [LCT Kruskal | SPFA]
题目描述 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,…,n,边标号为 1,2,3,…, ...