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服务器优化的更多相关文章

  1. 高级运维(四):Nginx常见问题处理、安装部署Tomcat服务器、使用Tomcat部署虚拟主机

    一.Nginx常见问题处理 目标: 本案例要求对Nginx服务器进行适当优化,以提升服务器的处理性能: 1> 不显示Nginx软件版本号 2> 如果客户端访问服务器提示“Too many ...

  2. Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器

    目录 Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器 crm django项目部署流程 使用supervisro启动uwsgi,退出虚 ...

  3. nginx优化php-fpm优化 压力测试达到每分150万访问量webbench网站压力

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装:引用wget http: ...

  4. JMeter工具接口性能压力测试分析与优化

    最近公司做的项目,要求对相关接口做性能压力测试,在这里记录一下分析解决过程. 压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情 ...

  5. 记录一次自己对nginx+fastcgi(fpm)+mysql压力测试结果

    nginx + fastcgi(fpm) 压力测试: CentOS release 5.9 16核12G内存 静态页面: 并发1000,压测200秒,测试结果: 系统最大负载5.47 成功响应: 25 ...

  6. linux上实现jmeter分布式压力测试(转)

    摘要:最近根据公司工作的需求,学习了一些压力测试的知识,目前,公司使用的是jmeter进行压力测试.下面就记录下近期的学习.我想将这次的博文分成三个部分:1.开始测试前的准备(测试环境的搭建)2.在一 ...

  7. Nginx使用webbench进行压力测试

    在运维工作中,压力测试是一项非常重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验. 但是,在压力测试中存在一个共性,那就是压力测试的 ...

  8. Nginx使用webbench进行压力测试(转载)

    在运维工作中,压力测试是一项非常重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验. 但是,在压力测试中存在一个共性,那就是压力测试的 ...

  9. Linux系统上安装软件(JDK以及tomcat服务器)

    一:安装jdk linux系统上面如果运行java程序,就需要安装java的运行环境(jdk) 1:下载linux版本的jdk 地址:http://www.oracle.com/technetwork ...

随机推荐

  1. 【转】wget

    wget 下载整个网站,或者特定目录 需要下载某个目录下面的所有文件.命令如下 wget -c -r -np -k -L -p www.xxx.org/pub/path/ 在下载时.有用到外部域名的图 ...

  2. FastDFS角色配置参数思维导图

  3. java 如何将 word,excel,ppt如何转pdf --openoffice (1)

    承上启下,可折叠 上一篇说的是:服务器是windows server时,用jacob将msoffice(指的是word,excel,ppt)转换成pdf. 若被部署项目的服务器是centOS等linu ...

  4. [PHP]全局使用 Composer 组件的思路

    /** * 全局使用 composer 组件的步骤: * * 1. 建一个包含所有需要全局使用的composer包的项目. * 如:globalVendor/ * composer init 初始化 ...

  5. 备忘:java在cmd中编译运行

    防止每次用的时候都想不起来 1.进入.java文件所在的路径 (cls清除控制台的命令) 2.javac编译 javac -d . demo1.java javac demo1.java 如所编译的文 ...

  6. Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  7. ABP示例程序-使用AngularJs,ASP.NET MVC,Web API和EntityFramework创建N层的单页面Web应用

    本片文章翻译自ABP在CodeProject上的一个简单示例程序,网站上的程序是用ABP之前的版本创建的,模板创建界面及工程文档有所改变,本文基于最新的模板创建.通过这个简单的示例可以对ABP有个更深 ...

  8. 在ConcurrentModificationException异常上的联想

    1.什么是ConcurrentModificationException? 大家都听说过快速报错fast-fail吧,fast-fail的发生就是说明发生了ConcurrentModification ...

  9. 简易商品信息管理系统——首个Web项目

    正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...

  10. MIT-线性代数笔记(7-11)

    第 07 讲 求解 Ax=0 :主变量,特解 矩阵的秩Rank(A):矩阵主元的个数. 找出“主变量”pivotvariables,主列,即主元所在的列,其他列,称为自由列.(自由列表示可以自由或任意 ...