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. grep使用技巧一:模式pattern为字符串文件

    pattern文件: antc  areq  bdos  bogt   …… igs.txt文件: abmf    298.4725   16.2623   abpo     47.2292  -19 ...

  2. jenkins构建一个maven项目[五]

    标签(linux): jenkins 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 构建一个maven项目,即为构建java项目.模拟实验之前先把实验代码推送到 ...

  3. Tensorflow ActiveFunction激活函数解析

    Active Function 激活函数 原创文章,请勿转载哦~!! 觉得有用的话,欢迎一起讨论相互学习~Follow Me Tensorflow提供了多种激活函数,在CNN中,人们主要是用tf.nn ...

  4. R语言-图形初阶

    在本节中,主要目的是如何使用R语言做出简单的图形 案例1:做出wt和mpg之间的关系 attach(mtcars) plot(wt,mpg) abline(lm(mpg~wt)) title('Reg ...

  5. 同一台机器上多个tomcat启动造成的内存溢出问题的解决方法。

    加下面这句话就行了,我是WIN10+双tomcat+nginx(本地站点),无压力.在编译器的vm option里面加哦. -server -Xms512m -Xmx1024m -XX:PermSiz ...

  6. windows免费?linux免费?赶紧过来看吧

    1.今天分享大家一个免费申请linux的网站,可以用来做学习使用! 1.链接地址:https://linuxzoo.net 一次性邮箱:https://temp-mail.org   打开网址申请一个 ...

  7. cglib应用

    JDK的动态代理,经常被用来动态地创建对象的代理.JDK的动态代理用起来非常简单,但是有一个限制,就是使用动态代理的对象必须实现一个或多个接口.如果想代理没有实现接口,还可以使用cglib包来完成代理 ...

  8. .net下使用socket.io随笔记录

    一.问题背景 目前公司在互联网产品上需要程序与前端部分要进行一个实时交互,在进行一定程度上的选型后,决定使用socket.io框架进行一个实践,算是公司的一个新的 尝试,也算是给自己增加增长见闻,由于 ...

  9. 《深入理解Java虚拟机》——垃圾收集器与内存分配策略

    GC需要完成: 哪些内存需要回收 什么时候回收 如何回收 如何确定对象不再使用 引用计数算法 给对象添加一个引用计数器,当有一个地方引用它时,计数器值进行加1操作:当引用失效时,计数器值进行减1操作: ...

  10. php与web页面交互

    一.web表单 web表单的功能是让浏览者和网站有一个互动的平台.web表单主要用来在网页中发送数据到服务器. 1.1 表单的创建 使用form标记,并在其中插入相关的表单元素,即可创建一个表单. & ...