精华内容
下载资源
问答
  • 优化Oracle数据库,有两种方式

    千次阅读 2017-08-08 22:02:45
    数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本身的一些优化,逻辑...

    数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化

    物理优化的一些原则:

    1). Oracle的运行环境(网络,硬件等)

    2). 使用合适的优化器

    3). 合理配置oracle实例参数

    修改最大连接数:alter system set processes=2000 scope = spfile;

    禁止回收站功能:alter system set recyclebin=off scope=spfile;

    4). 建立合适的索引(减少IO)

    5). 将索引数据和表数据分开在不同的表空间上(降低IO冲突)

    6). 建立表分区,将数据分别存储在不同的分区上(以空间换取时间,减少IO)




    逻辑上优化(开发有关):

    1). 可以对表进行逻辑分割,如中国移动用户表,可以根据手机尾数分成10个表,这样对性能会有一定的作用

    sql语句上的优化

    2). Sql语句使用占位符语句,并且开发时候必须按照规定编写sql语句(如全部大写,全部小写等)oracle解析语句后会放置到共享池中

    如: select * from Emp where name=?  这个语句只会在共享池中有一条,而如果是字符串的话,那就根据不同名字存在不同的语句,所以占位符效率较好

    3). 数据库不仅仅是一个存储数据的地方,同样是一个编程的地方,一些耗时的操作,可以通过存储过程等在用户较少的情况下执行,从而错开系统使用的高峰时间,提高数据库性能

    4). 尽量不使用*号,如select * from Emp,因为要转化为具体的列名是要查数据字典,比较耗时

    5).Oracle的解析器按照从右到左的顺序处理处理FROM子句的  

    因此子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表。

    6). Where字句 规则

    Oracle 中Where子句时从右往左处理的,能过滤掉非常多的数据的条件应该放在where的末尾, 另外!=符号比较的列将不使用索引,列经过了计算(如变大写等)不会使用索引(需要建立起函数), is null、is not null等优化器不会使用索引

    7). 使用Exits Not Exits 替代 In  Not in 【不会使用索引】

    8). 合理使用事务,合理设置事务隔离性

    数据库的数据操作比较消耗数据库资源的,尽量使用批量处理,以降低事务操作次数

    9) 为常用的查询字段建立索引 永远给每一个表建立主键 外键建立外键关联

    10) 尽量在应用层使用缓存 必须redis


    展开全文
  • Redis优化配置

    万次阅读 2019-09-23 16:35:47
    常用的内存优化方案如下几部分: 1、配置优化 2、缩减键值对象 3、命令处理 4、缓存淘汰方案 一、配置优化 1、linux配置优化 内存分配 vm.overcommit_memory Redis是内存操作,需要优先使用内存。设置...

    redis所有的数据都在内存中,而内存又是非常宝贵的资源。常用的内存优化方案有如下几部分:

    1、配置优化

    2、缩减键值对象

    3、命令处理

    4、缓存淘汰方案

    一、配置优化

    1、linux配置优化

    内存分配

    •  vm.overcommit_memory 
    • Redis是内存操作,需要优先使用内存。设置overcommit 为1。是为了让 fork 操作能够在低内存下也执行成功。Linux 操作系统对大部分申请内存的请 求都回复 yes,以便能运行更多的程序。因为申请内存后,并不会马上使用内存,这种技术叫做 overcommit。 vm.overcommit_memory 用来设置内存 分配策略,有三个可选值 

    •  THP
      • Redis 在启动时可能会看到如下日志:

               

    • Redis 建议修改 Transparent Huge Pages(THP)的相关配置,Linux kernel 在2.6.38内核增加了 THP 特性,支持大内存页(2MB)分配,默认开启。当开启 时可以降低 fork 子进程的速度,但 fork 操作之后,每个内存页从原来 4KB 变为 2MB,会大幅增加重写期间父进程内存消耗。同时每次写命令引起的复制内 存页单位放大了512倍,会拖慢写操作的执行时间,导致大量写操作慢查询,例如简单的 incr 命令也会出现在慢查询中。因此 Redis 日志中建议将此特性进 行禁用,禁用方法如下:

            echo never > /sys/kernel/mm/transparent_hugepage/enabled

           为使机器重启后THP配置依然生效,可以在/etc/rc.local 中追加 echo never>/sys/kernel/mm/transparent_hugepage/enabled

    • swappiness
      • swap 对于操作系统来比较重要,当物理内存不足时,可以将一部分内存页进行 swap 操作,已解燃眉之急。swap 空间由硬盘提供,对于需要高并发、 高吞吐的应用来说,磁盘 IO 通常会成为系统瓶颈。在 Linux 中,并不是要等到所有物理内存都使用完才会使用到 swap,系统参数 swppiness 会决定操 作系统使用 swap 的倾向程度。swappiness 的取值范围是0~100,swappiness 的值越大,说明操作系统可能使用swap的概率越高,swappiness 值越 低,表示操作系统更加倾向于使用物理内存。swap 的默认值是60,了解这个值的含义后,有利于 Redis 的性能优化。下表对 swappiness 的重要值进行了说明。

        OOM(Out Of Memory)killer 机制是指 Linux 操作系统发现可用内存不足时,强制杀死一些用户进程(非内核进程),来保证系统有足够的可用内存 进行分配。 为使配置在重启 Linux 操作系统后立即生效,只需要在/etc/sysctl.conf 追加 vm.swappiness={bestvalue}即可 echo vm.swappiness={bestvalue} >> /etc/sysctl.conf

    • 查看 swap 的总体情况 free-m 如下服务器开启了8189M swap,其中使用了 5241MB

    • ulimit设置
      • 可以通过 ulimit 查看和设置系统当前用户进程的资源数。其中 ulimit-a 命令包含的 open files 参数,是单个用户同时打开的最大文件个数 

     Redis 允许同时有多个客户端通过网络进行连接,可以通过配置 maxclients 来限制最大客户端连接数。对 Linux 操作系统来说,这些网络连接都是文件 句柄。假设当前 open files 是4096,那么启动 Redis 时会看到如下日志:

    #You requested maxclients of 10000 requiring at least 10032 max file descriptors.

    #Redis can’t set maximum open files to 10032 because of OS error: Operation not permitted.

    #Current maximum open files is 4096. Maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase ‘ulimit –n’ .

    解释如下:

    第一行:Redis 建议把 open files 至少设置成10032,那么这个10032是如何来的呢?因为 maxclients 默认是10000,这些是用来处理客户端连接的,除此 之外,Redis 内部会使用最多32个文件描述符,所以这里的10032=10000+32。
    第二行:Redis 不能将 open files 设置成10032,因为它没有权限设置。
    第三行:当前系统的 open files 是4096,所以将 maxclients 设置成4096-32=4064个,如果你想设置更高的 maxclients,请使用 ulimit-n 来设置。
    从上面的三行日志分析可以看出 open files 的限制优先级比 maxclients 大。 Open files 的设置方法如下:
    ulimit –Sn {max-open-files}


    2、Redis配置优化

     

    • 设置maxmemory。设置Redis使用的最大物理内存,即Redis在占用maxmemory大小的内存之后就开始拒绝后续的写入请求,该参数可以确保Redis因为使用 了大量内存严重影响速度或者发生OOM(out-of-memory,发现内存不足时,它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存)。此外, 可以使用info命令查看Redis占用的内存及其它信息。
    • 让键名保持简短。键的长度越长,Redis需要存储的数据也就越多
    • 客户端timeout 设置一个超时时间,防止无用的连接占用资源。设置如下命令:
      • timeout 150
      • tcp-keepalive 150 (定时向client发送tcp_ack包来探测client是否存活的。默认不探测)
    • 检查数据持久化策略 数据落磁盘尽可能减少性能损坏,以空间换时间。设置如下命令:
      • rdbcompression no : 默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想 消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。
      • rdbchecksum no : 默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希 望获取到最大的性能提升,可以关闭此功能。
    • 优化AOF和RDB,减少占用CPU时间 主库可以不进行dump操作或者降低dump频率。 取消AOF持久化。命令如下: appendonly no
    • 监控客户端的连接
      • 因为Redis是单线程模型(只能使用单核),来处理所有客户端的请求, 但由于客户端连接数的增长,处理请求的线程资源开始降低分配给单个客户端连接 的处理时间
    • 限制客户端连接数 。在Redis-cli工具中输入info clients可以查看到当前实例的所有客户端连接信息
      • maxclients属性上修改客户端连接的最大数,可以通过在Redis-cli工具上输入 config set maxclients 去设置最大连接数。根据连接数负载的情况

    二、缩减键值对象


    降低Redis内存使用最直接的方式就是缩减键(key)和值(value)的长度。

    • key长度:如在设计键时,在完整描述业务情况下,键值越短越好。
    • value长度:值对象缩减比较复杂,常见需求是把业务对象序列化成二进制数组放入Redis。首先应该在业务上精简业务对象,在存到Redis之前先把你的数据 压缩下。

    三. 命令处理


    Redis基于C/S架构模式,基于Redis操作命令是解决响应延迟问题最关键的部分,因为Redis是个单线程模型,客户端过来的命令是按照顺序执行的。比较常见的 延迟是带宽,通过千兆网卡的延迟大约有200μs。倘若明显看到命令的响应时间变慢,延迟高于200μs,那可能是Redis命令队列里等待处理的命令数量比较多
    要分析解决这个性能问题,需要跟踪命令处理数的数量和延迟时间。
    比如可以写个脚本,定期记录total_commands_processed的值。当客户端明显发现响应时间过慢时,可以通过记录的total_commands_processed历史数据值来判 断命理处理总数是上升趋势还是下降趋势,以便排查问题 在info信息里的 total_commands_processed字段显示了Redis服务处理命令的总数

    解决方案:

    1.使用多参数命令:若是客户端在很短的时间内发送大量的命令过来,会发现响应时间明显变慢,这由于后面命令一直在等待队列中前面大量命令执行完毕。有 个方法可以改善延迟问题,就是通过单命令多参数的形式取代多命令单参数的形式。
    举例来说 循环使用LSET命令去添加1000个元素到list结构中,是性能比较差的一种方式,更好的做法是在客户端创建一个1000元素的列表,用单个命令LPUSH或 RPUSH,通过多参数构造形式一次性把1000个元素发送的Redis服务上。下面是Redis的一些操作命令,有单个参数命令和支持多个参数的命令,通过这些命令可 尽量减少使用多命令的次数。


    2.管道命令:另一个减少多命令的方法是使用管道(pipeline),把几个命令合并一起执行,从而减少因网络开销引起的延迟问题。因为10个命令单独发送到服务端 会引起10次网络延迟开销,使用管道会一次性把执行结果返回,仅需要一次网络延迟开销。Redis本身支持管道命令,大多数客户端也支持,倘若当前实例延迟 很明显,那么使用管道去降低延迟是非常有效的


    四、缓存淘汰优化


    redis 内存数据集大小上升到一定大小的时候,就会进行数据淘汰策略。如果不淘汰经常不用的缓存数据,那么正常的数据将不会存储到缓存当中。
    我们通过配置redis.conf中的maxmemory这个值来开启内存淘汰功能。

    • maxmemory

           值得注意的是,maxmemory为0的时候表示我们对Redis的内存使用没有限制

          根据应用场景,选择淘汰策略

    • maxmemory-policy noeviction

    内存淘汰的过程
    首先,客户端发起了需要申请更多内存的命令(如set)。
    然后,Redis检查内存使用情况,如果已使用的内存大于maxmemory则开始根据用户配置的不同淘汰策略来淘汰内存(key),从而换取一定的内存。
    最后,如果上面都没问题,则这个命令执行成功。


    动态改配置命令

    此外,redis支持动态改配置,无需重启。

    • 设置最大内存

       config set maxmemory 100000

    • 设置淘汰策略

       config set maxmemory-policy noeviction

    • 内存淘汰策略

       volatile-lru

    • 从已设置过期时间的数据集(server .db[i].expires)中挑选最近最少使用的数据淘汰。

       allkeys-lru

    • 从数据集(server .db[i].dict)中挑选最近最少使用的数据淘汰

       volatile-lfu

    • 从设置了过期时间的数据集(server .db[i].expires)中选择某段时间之内使用频次最小的键值对清除掉

       allkeys-lfu

    • 从所有的数据集(server .db[i].dict)中选择某段时间之内使用频次最少的键值对清除

       volatile-ttl

    • 从已设置过期时间的数据集(server .db[i].expires)中挑选将要过期的数据淘汰

       volatile-random

    • 从已设置过期时间的数据集(server .db[i].expires)中任意选择数据淘汰

        allkeys-random

    • 从数据集(server .db[i].dict)中任意选择数据淘汰

        no-enviction
       当内存达到限制的时候,不淘汰任何数据,不可写入任何数据集,所有引起申请内存的命令会报错。
       算法文章:(https://blog.csdn.net/ZYZMZM_/article/details/90546812)

    如何选择淘汰策略


    下面看看几种策略的适用场景

    • allkeys-lru :如果我们的应用对缓存的访问符合幂律分布,也就是存在相对热点数据,或者我们不太清楚我们应用的缓存访问分布状况,我们可以选择 allkeys-lru策略。
    • allkeys-random :如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。
    • volatile-ttl:这种策略使得我们可以向Redis提示哪些key更适合被eviction。

    另外,volatile-lru策略和volatile-random策略适合我们将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达 到相同的效果,值得一提的是将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存 

    展开全文
  • Mysql参数优化对于不同的网站,及在线量等,以及机器硬件的配置关系,优化不可能一次性完成,需要不断的观察以及调试,才可能的得到最佳的效果 Mysql参数优化对于不同的网站,及在线量等,以及机器硬件的配置...

    码字不易,转载请附原链,搬砖繁忙回复不及时见谅,技术交流请加QQ群:909211071

    Mysql性能优化、Mysql参数优化、Mysql配置优化。Mysql参数优化对于不同的网站,及在线量等,以及机器硬件的配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能的得到最佳的效果

    更多MySQL缓冲区配置优化参考:https://success.blog.csdn.net/article/details/97396807

    Mysql参数优化对于不同的网站,及在线量等,以及机器硬件的配置都有关系,优化不可能一次性完成,需要不断的观察以及调试,才有可能的得到最佳的效果

    为了测试我们创建一个test1的库创建一个tb1的表,然后导入2万行数据

    mysql> select count(*) from test1.tb1;
    +----------+
    | count(*) |
    +----------+
    | 20000 |
    +----------+
    1 row in set (0.15 sec)</span>

    在手动插入一条其他数据。

    mysql> insert into test1.tb1 values(20001,admin,12322112123332,1999-1-1,2019-9-1,ppppppppppp); 
    Query OK, 1 row affected (0.00 sec)

    在没有优化之前我们使用mysqlslap来进行压力测试

    \
    我们可以看到没有优化之前,它所用的时间为41.761秒,接下来开始我们的配置优化

    下面列出了对性能优化影响较大的主要变量,主要分为连接请求的变量和缓冲区的变量

    1) 连接请求的变量

    Max_connections

    Mysql的最大连接数,如果服务器的并发请求量比较大,可以调高这个值,当然这是要建立在机器能够支撑的情况下,因为如果连接数越来越多,mysql会为每个连接提供缓冲区,就会开销的越多的内存,所以需要适当的调整该值,不能随便去提高设值。

    Mysql>show variables like '%max_connections%';
    Mysql>show status like '%max_user_connections%';

    如果max_used_connections跟max_connections相同那么就是max_connections设置过低或者超过服务器的负载上限了,低于10%则设置过大

    1.首先查看mysql默认的最大连接数(默认为151)

    mysql> show variables like "max_connections%";
    +-----------------+-------+
    | Variable_name | Value |
    +-----------------+-------+
    | max_connections | 151 |
    +-----------------+-------+
    1 row in set (0.02 sec)

    修改/etc/my.cnf在[mysqld]下添加以下内容,设置最大连接数为1024,重启mysql服务验证

    Max_connections=1024

    查看修改后的最大连接数

    mysql> show variables like "max_connections%";
    +-----------------+-------+
    | Variable_name | Value |
    +-----------------+-------+
    | max_connections | 1024 |
    +-----------------+-------+
    1 row in set (0.00 sec)

    2)back_log

    mysql能暂存的连接数量,当主要mysql线程在一个很短时间内得到非常多的连接请求时候它就会起作用,如果mysql的连接数据达到max_connections时候,新来的请求将会被存在堆栈中,等待某一连接释放资源,该推栈的数量及back_log,如果等待连接的数量超过back_log,将不被授予连接资源

    back_log值指出在mysql暂时停止回答新请求之前的短时间内有多少个请求可以被存在推栈中,只有如果期望在一个短时间内有很多连接的时候需要增加它

    当我们在观察主机进程列表

    mysql>show full processlist

    发现大量的待连接进程时,就需要加大back_log或者加大max_connections的值

    可以通过以下命令查看back_log的设置

    >mysql> show variables like '%back_log%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | back_log | 254 |
    +---------------+-------+
    1 row in set (0.00 sec)

    修改/etc/my.cnf文件在[mysqld]下添加如下内容,设置最大连接数为1024,随后重启mysql服务再次查看

    mysql> show variables like '%back_log%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | back_log | 1024 |
    +---------------+-------+
    1 row in set (0.00 sec)

    3)wait_timeout和interactive_timeout

    wait_timeout:指的是mysql在关闭一个非交互的连接之前所要等待的秒数
    interactive_timeoutz:指的是mysql在关闭一个交互的连接之前所需要等待的秒数,比如我们在终端上进行mysql管理,使用的即使交互的连接,这时候,如果没有操作的时间超过了interactive_time设置的时间就会自动的断开,默认的是28800,可调优为7200。wait_timeout:如果设置太小,那么连接关闭的就很快,从而使一些持久的连接不起作用
    如果设置太大,容易造成连接打开时间过长,在show processlist时候,能看到很多的连接 一般希望wait_timeout尽可能低

    查看wait_timeout和interactive_timeout的设置

    mysql> show variables like "%wait_timeout%";
    mysql> show variables like "%interactive_timeout%";

    \

    修改/etc/my.cnf,添加以下内容

    wait_timeout=100
    interactive_timeout=100

    重启mysql服务,再次查看

    \

    4)key_buffer_size
    key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度,通过key_read_requests和key_reads可以直到key_baffer_size设置是否合理。
    可以通过show status like "key_read%"查看

    mysql> show variables like "key_buffer_size%";
    +-----------------+---------+
    | Variable_name | Value |
    +-----------------+---------+
    | key_buffer_size | 8388608 |
    +-----------------+---------+
    1 row in set (0.00 sec)
    mysql> show status like "key_read%";
    +-------------------+-------+
    | Variable_name | Value |
    +-------------------+-------+
    | Key_read_requests | 6 |
    | Key_reads | 3 |
    +-------------------+-------+
    2 rows in set (0.01 sec)

    一共有6个索引读取请求,有三个请求在内存中没有找到直接从硬盘中读取索引

    key_buffer_size只对myisam表起作用,即使不使用myisam表,但是内部的临时磁盘表是myisam表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知

    mysql> show status like "created_tmp%";
    +-------------------------+-------+
    | Variable_name | Value |
    +-------------------------+-------+
    | Created_tmp_disk_tables | 0 |
    | Created_tmp_files | 5 |
    | Created_tmp_tables | 0 |
    +-------------------------+-------+
    3 rows in set (0.00 sec)

    默认配置数值是8388608我主机有2个G内存那么可调优为134217728(128MB)
    可以修改主配置文件添加如下内容

    key_buffer_size=128M

    重启mysql服务后再次查看

    5)query_cache_size(查询缓存简称QC)
    使用查询缓冲,mysql将查询结果存放在缓冲区中,今后对于同样的select语句(区分大小写),将直接从缓冲区中读取结果。
    一个sql查询如果以select开头,那么mysql服务器将尝试对其使用查询缓存。
    注:两个sql语句,只要想差哪怕是一个字符(列如大小写不一样;多一个空格等),那么这两个sql将使用不同的一个cache。
    上述状态值可以使用show status like &#39;Qcache%获得&#39;

    mysql> show status like "%Qcache%";
    +-------------------------+---------+
    | Variable_name | Value |
    +-------------------------+---------+
    | Qcache_free_blocks | 1 |
    | Qcache_free_memory | 1031832 |
    | Qcache_hits | 0 |
    | Qcache_inserts | 0 |
    | Qcache_lowmem_prunes | 0 |
    | Qcache_not_cached | 0 |
    | Qcache_queries_in_cache | 0 |
    | Qcache_total_blocks | 1 |
    +-------------------------+---------+
    8 rows in set (0.00 sec)

    Qcache_free_blocks:缓存中相邻内存块的个数。如果该值显示较大,则说明Query Cache 中的内存碎片较多了,FLUSH QUERY CACHE会对缓存中的碎片进行整理,从而得到一个空闲块。
    注:当一个表被更新之后,和它相关的cache blocks将被free。但是这个block依然可能存在队列中,除非是在队列的尾部。可以用FLUSH QUERY CACHE语句来清空free blocks
    Qcache_free_memory:Query Cache 中目前剩余的内存大小。通过这个参数我们可以较为准确的观察出当前系统中的Query Cache 内存大小是否足够,是需要增加还是过多了。
    Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。
    Qcache_inserts:表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。
    Qcache_lowmem_prunes:多少条Query 因为内存不足而被清除出Query Cache。通过“Qcache_lowmem_prunes”和“Qcache_free_memory”相互结合,能够更清楚的了解到我们系统中Query Cache 的内存大小是否真的足够,是否非常频繁的出现因为内存不足而有Query 被换出。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的free_blocks和free_memory可以告诉您属于哪种情况)
    Qcache_not_cached:不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句或者用了now()之类的函数。
    Qcache_queries_in_cache:当前Query Cache 中cache 的Query 数量;
    Qcache_total_blocks:当前Query Cache 中的block 数量;。
    我们再查询一下服务器关于query_cache的配置:


    \

    上图可以看出query_cache_type为off表示不缓存任何查询

    各字段的解释:
    query_cache_limit:超过此大小的查询将不缓存
    query_cache_min_res_unit:缓存块的最小大小 ,query_cache_min_res_unit的配置是一柄”双刃剑”,默认是4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费。
    query_cache_size:查询缓存大小 (注:QC存储的最小单位是1024 byte,所以如果你设定了一个不是1024的倍数的值,这个值会被四舍五入到最接近当前值的等于1024的倍数的值。)

    query_cache_type:缓存类型,决定缓存什么样的查询,注意这个值不能随便设置,必须设置为数字,可选项目以及说明如下:

    如果设置为0,那么可以说,你的缓存根本就没有用,相当于禁用了。

    如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。

    如果设置为2,则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询。

    修改/etc/my.cnf,配置完后的部分文件如下:

    query_cache_size=256M

    query_cache_type=1

    保存文件,重新启动MYSQL服务,然后通过如下查询来验证是否真正开启了:

    \

    6)max_connect_errors是一个mysql中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码等情况,当超过指定次数,mysql服务器将禁止host的连接请求,直到mysql服务器重启或通过flush hosts命令清空此host的相关信息 max_connect_errors的值与性能并无太大关系。
    修改/etc/my.cnf文件,在[mysqld]下面添加如下内容
    max_connect_errors=20

    修改完后重启mysql服务

    7)sort_buffer_size
    每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY 或GROUP BY操作,Sort_Buffer_Size并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。列如:500个连接将会消耗500*sort_buffer_size(2M)=1G内存
    修改/etc/my.cnf文件,在[mysqld]下面添加如下:

    sort_buffer_size=2M

    8)max_allowed_packet=32M
    mysql根据配置文件会限制,server接受的数据包大小。有时候大的插入和更新会受max_allowed_packet参数限制,导致写入或者更新失败,更大值是1GB,必须设置1024的倍数

    9)join_buffer_size=2M
    用于表间关联缓存的大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。

    10)thread_cache_size = 300
    服务器线程缓存,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时,那么客户端的线程将被放到缓存中以响应下一个客户而不是销毁(前提是缓存数未达上限),如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。设置规则如下:1GB 内存配置为8,2GB配置为16,3GB配置为32,4GB或更高内存,可配置更大。服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)

    \

    试图连接到MySQL(不管是否连接成功)的连接数

    >mysql> show status like '%threads_%';
    +-------------------+-------+
    | Variable_name | Value |
    +-------------------+-------+
    | Threads_cached | 0 |
    | Threads_connected | 1 |
    | Threads_created | 1 |
    | Threads_running | 1 |
    +-------------------+-------+
    4 rows in set (0.00 sec)

    Threads_cached :代表当前此时此刻线程缓存中有多少空闲线程。
    Threads_connected :代表当前已建立连接的数量,因为一个连接就需要一个线程,所以也可以看成当前被使用的线程数。
    Threads_created :代表从最近一次服务启动,已创建线程的数量,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值。
    Threads_running :代表当前激活的(非睡眠状态)线程数。并不是代表正在使用的线程数,有时候连接已建立,但是连接处于sleep状态。

    11.innodb_buffer_pool_size

    对于InnoDB表来说,innodb_buffer_pool_size的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。

    mysql> show variables like '%innodb_buffer_pool_size%';

    设置innodb_buffer_pool_size

    修改/etc/my.cnf文件,在[mysqld]下面添加如下内容

    innodb_buffer_pool_size = 2048M

    重启MySQL Server进入后,查看设置已经生效。

    12. innodb_flush_log_at_trx_commit

    主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。0,表示当事务提交时,不做日志写入操作,而是每秒钟将log buffer中的数据写入日志文件并flush磁盘一次;1,则在每秒钟或是每次事物的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;设置为2,每次事务提交引起写入日志文件的动作,但每秒钟完成一次flush磁盘操作。

    实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。

    根据MySQL手册,在允许丢失最近部分事务的危险的前提下,可以把该值设为0或2。

    13.innodb_thread_concurrency = 0
    此参数用来设置innodb线程的并发数量,默认值为0表示不限制,若要设置则与服务器的CPU核数相同或是cpu的核数的2倍,建议用默认设置,一般为8.

    14.innodb_log_buffer_size

    此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,对于较大的事务,可以增大缓存大小。

    innodb_log_buffer_size=32M

    15. innodb_log_file_size = 50M

    此参数确定数据日志文件的大小,以M为单位,更大的设置可以提高性能.

    16. innodb_log_files_in_group = 3

    为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3

    17.read_buffer_size = 1M
    MySql 读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。和 sort_buffer_size一样,该参数对应的分配内存也是每个连接独享

    18.read_rnd_buffer_size = 16M
    MySql 的随机读(查询操作)缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySql会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySql会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。
    注:顺序读是指根据索引的叶节点数据就能顺序地读取所需要的行数据。随机读是指一般需要根据辅助索引叶节点中的主键寻找实际行数据,而辅助索引和主键所在的数据段不同,因此访问方式是随机的。

    19.bulk_insert_buffer_size = 64M
    批量插入数据缓存大小,可以有效提高插入效率,默认为8M

    20.binary log

    log-bin=/usr/local/mysql/data/mysql-bin

    binlog_cache_size = 2M //为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存, 提高记录bin-log的效率。没有什么大事务,dml也不是很频繁的情况下可以设置小一点,如果事务大而且多,dml操作也频繁,则可以适当的调大一点。前者建议是--1M,后者建议是:即 2--4M

    max_binlog_cache_size = 8M //表示的是binlog 能够使用的最大cache 内存大小

    max_binlog_size= 512M //指定binlog日志文件的大小,如果当前的日志大小达到max_binlog_size,还会自动创建新的二进制日志。你不能将该变量设置为大于1GB或小于4096字节。默认值是1GB。在导入大容量的sql文件时,建议关闭sql_log_bin,否则硬盘扛不住,而且建议定期做删除。

    expire_logs_days = 7 //定义了mysql清除过期日志的时间。

    二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。

    mysqladmin flush-logs 也可以重新开始新的binarylog

    相关优化参数总结:

    slow_query_log=1
    slow_query_log_file = /usr/local/mysql/data/slow_query_log
    long_query_time=1
    log-queries-not-using-indexes
    max_connections=1024
    back_log=128
    wait_timeout=60
    interactive_timeout=7200
    key_buffer_size=256M
    query_cache_size=256M
    query_cache_type=1
    query_cache_limit=50M
    max_connect_errors=20
    sort_buffer_size=2M
    max_allowed_packet=32M
    join_buffer_size=2M
    thread_cache_size=200
    innodb_buffer_pool_size=2048M
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=32M
    innodb_log_file_size=128M
    innodb_log_files_in_group=3
    log-bin=mysql-bin
    binlog_cache_size=2M
    max_binlog_cache_size=8M
    max_binlog_size=512M
    expire_logs_days=7
    read_buffer_size=1M
    read_rnd_buffer_size=16M
    bulk_insert_buffer_size=64M
    server-id=1

    优化结束后,再次进行压力测试,查看效果

    \

     

     

     

    展开全文
  • Tomcat配置参数优化

    千次阅读 2016-10-04 10:42:52
    Tomcat的优化主要体现在方面:内存、并发连接数。 1、内存优化优化内存,主要是在bin/catalina.bat/sh 配置文... Tomcat在使用的过程中会遇到很多报错,有些是程序的报错,但还

    摘要: Tomcat在使用的过程中会遇到很多报错,有些是程序的报错,但还有一部分是tomcat本身的报错,我们可以通过优化tomcat的初始配置来提高tomcat的性能。Tomcat的优化主要体现在两方面:内存、并发连接数。 1、内存优化: 优化内存,主要是在bin/catalina.bat/sh 配置文...

    Tomcat在使用的过程中会遇到很多报错,有些是程序的报错,但还有一部分是tomcat本身的报错,我们可以通过优化tomcat的初始配置来提高tomcat的性能。Tomcat的优化主要体现在两方面:内存、并发连接数。

    Tomcat7优化配置Tomcat7优化配置

    1、内存优化:

    优化内存,主要是在bin/catalina.bat/sh 配置文件中进行。linux上,在catalina.sh中添加:

    JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -Dfile.encoding=utf-8 -XX:MaxPermSize=256m -XX:PermSize=128M -XX:MaxPermSize=256M"

    其中:

    • -server:启用jdk的server版本。
    • -Xms:虚拟机初始化时的最小堆内存。
    • -Xmx:虚拟机可使用的最大堆内存。 #-Xms与-Xmx设成一样的值,避免JVM因为频繁的GC导致性能大起大落
    • -XX:PermSize:设置非堆内存初始值,默认是物理内存的1/64。
    • -XX:MaxNewSize:新生代占整个堆内存的最大值。
    • -XX:MaxPermSize:Perm(俗称方法区)占整个堆内存的最大值,也称内存最大永久保留区域。

    1)错误提示:java.lang.OutOfMemoryError:Java heap space

    Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Outof Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的-Xms和-Xmx即可解决问题,通常将-Xms和-Xmx设置成一样,堆的最大值设置为物理可用内存的最大值的80%。

    set JAVA_OPTS=-Xms512m-Xmx512m

    2)错误提示:java.lang.OutOfMemoryError: PermGenspace

    PermGenspace的全称是Permanent Generationspace,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行precompile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。解决方法:

    setJAVA_OPTS=-XX:PermSize=128M

    3)在使用-Xms和-Xmx调整tomcat的堆大小时,还需要考虑垃圾回收机制。如果系统花费很多的时间收集垃圾,请减小堆大小。一次完全的垃圾收集应该不超过3-5 秒。如果垃圾收集成为瓶颈,那么需要指定代的大小,检查垃圾收集的详细输出,研究垃圾收集参数对性能的影响。一般说来,你应该使用物理内存的 80% 作为堆大小。当增加处理器时,记得增加内存,因为分配可以并行进行,而垃圾收集不是并行的。

    2、连接数优化:

    #优化连接数,主要是在conf/server.xml配置文件中进行修改。

    2.1、优化线程数

    找到Connectorport="8080" protocol="HTTP/1.1",增加maxThreads和acceptCount属性(使acceptCount大于等于maxThreads),如下:

    <Connectorport="8080" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443"acceptCount="500" maxThreads="400" />

    其中:

    • maxThreads:tomcat可用于请求处理的最大线程数,默认是200
    • minSpareThreads:tomcat初始线程数,即最小空闲线程数
    • maxSpareThreads:tomcat最大空闲线程数,超过的会被关闭
    • acceptCount:当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理.默认100
    2.2、使用线程池

    在server.xml中增加executor节点,然后配置connector的executor属性,如下:

    <Executorname="tomcatThreadPool" namePrefix="req-exec-"maxThreads="1000" minSpareThreads="50"maxIdleTime="60000"/>
    <Connectorport="8080" protocol="HTTP/1.1"executor="tomcatThreadPool"/>

    其中:

    • namePrefix:线程池中线程的命名前缀
    • maxThreads:线程池的最大线程数
    • minSpareThreads:线程池的最小空闲线程数
    • maxIdleTime:超过最小空闲线程数时,多的线程会等待这个时间长度,然后关闭
    • threadPriority:线程优先级

    注:当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,这时会报java.net.SocketException:Too many open files错误。可使用下面步骤检查:

    • ps -ef |grep tomcat 查看tomcat的进程ID,记录ID号,假设进程ID为10001
    • lsof -p 10001|wc -l 查看当前进程id为10001的 文件操作数
    • 使用命令:ulimit -a 查看每个用户允许打开的最大文件数
    3、Tomcat Connector三种运行模式(BIO, NIO, APR)
    3.1、三种模式比较:

    1)BIO:一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下在Linux系统中默认使用这种方式。

    2)NIO:利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动(conf/server.xml配置文件):

    <Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000"redirectPort="8443"/>

    3)APR(Apache Portable Runtime):从操作系统层面解决io阻塞问题。Linux如果安装了apr和native,Tomcat直接启动就支持apr。

    3.2、apr模式

    安装apr以及tomcat-native

    yum -y install apr apr-devel

    进入tomcat/bin目录,比如:

    cd /opt/local/tomcat/bin/
    tar xzfv tomcat-native.tar.gz
    cd tomcat-native-1.1.32-src/jni/native
    ./configure --with-apr=/usr/bin/apr-1-config
    make && make install

    #注意最新版本的tomcat自带tomcat-native.war.gz,不过其版本相对于yum安装的apr过高,configure的时候会报错。

    解决:yum remove apr apr-devel –y,卸载yum安装的apr和apr-devel,下载最新版本的apr源码包,编译安装;或者下载低版本的tomcat-native编译安装

    安装成功后还需要对tomcat设置环境变量,方法是在catalina.sh文件中增加1行:

    CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"

    #apr下载地址:http://apr.apache.org/download.cgi

    #tomcat-native下载地址:http://tomcat.apache.org/download-native.cgi

    修改8080端对应的conf/server.xml

    protocol="org.apache.coyote.http11.Http11AprProtocol"

    <Connector executor="tomcatThreadPool"
    port="8080"
    protocol="org.apache.coyote.http11.Http11AprProtocol"
    connectionTimeout="20000"
    enableLookups="false"
    redirectPort="8443"
    URIEncoding="UTF-8" />

    PS:启动以后查看日志 显示如下表示开启 apr 模式

    Sep 19, 2016 3:46:21 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-apr-8081"]
    展开全文
  • 该方法中,通过级模糊优选模型综合计算定性与定量指标的平均相对优属度,采用决策序列相对优属度总和最大法求解最优化资源配置方案;最后,使用某汽车企业的多型号项目进行了实例仿真,验证了方法的有效性。
  • 数据库是基于操作系统的,目前大多数mysql都是安装在linux系统上,所以对于操作系统的一些参数配置也会影响到mysql的性能,下面就是列出一些常用的系统配置。 网络方面的配置,要修改/etc/sysctl.conf文件 增加tcp...
  • MySQL优化之my.conf配置详解

    万次阅读 多人点赞 2017-12-29 11:30:08
    最近项目不太忙,所以时间静心来研究下mysql的优化,对于MySQL的设置是否合理优化,直接影响到网站的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的...
  • Tomcat7优化配置

    千次阅读 2016-10-02 19:01:24
    Tomcat在使用的过程中会遇到很多报错,有些是程序的报错,但还有一部分是tomcat本身的报错,我们可以通过优化tomcat的初始配置来提高tomcat的性能。Tomcat的优化主要体现在方面:内存、并发连接数。
  • Tomcat和JVM配置优化手册

    千次阅读 2016-10-13 14:44:06
    在生产环境一般不会使用Tomcat的默认设置,为满足响应时间、...本文是调优方案,是生产环境Tomcat配置优化手册,录下,备忘。主要涉及执行器优化、连接器优化、开启压缩功能、日志信息优化、安全性及JVM优化等方面。
  • Nginx配置性能优化

    万次阅读 多人点赞 2014-04-03 22:23:18
    大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经了一个Web服务器了。而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能很好地工作了。然而,...
  • 一、内存优化默认情况下Tomcat的相关内存配置较低,这对于一些大型项目显然是不够用的,这些项目运行就已经耗费了大部分内存空间,何况大规模访问的情况。即使是本文中的这个只有一个页面的超小项目,在并发达到一定...
  • Android Studio配置优化最全详解

    万次阅读 多人点赞 2018-03-30 09:13:45
    适合第一次安装AS的新手,感谢网上的资源 是不是很多同学已经烦恼出现了?电脑配置已经很高了,但是每次运行Android程序的时候就很卡,而且每次安装运行程序都要等待很长时间,如果是在开发后期需要不停...
  • Spark 常用配置项与优化配置

    万次阅读 2015-03-12 22:01:38
    Spark 常用配置项与优化配置项 1、配置加载顺序: SparkConf方式 > 命令行参数方式 >文件配置方式。 应用程序SparkConf 优先级高 2.spark 常用配置详解 1 节点说明 IP Role 192.168.1.111...
  • Tomcat优化配置线程池

    万次阅读 2017-04-21 09:13:30
    简介    线程池作为提高程序处理数据能力的一...大量的服务器都或多或少的使用到了线程池技术,不管是用Java还是C++实现,线程池都如下的特点:线程池一般三个重要参数: 最大线程数。在程序运行的任何
  • MyEclipse x.x各版本终极优化配置指南

    千次阅读 2013-07-11 10:48:50
    先说优化:随着myeclipse版本不断更新,其功能不断强大,更加智能及人性化,为开发人员提供了很多便利、提高了开发速度,但是也牺牲了性能,让很多机器配置稍差的开发人员头疼不已。其实我们平时常用的功能只用20%,...
  • elasticsearch JVM优化配置-官网

    千次阅读 2018-11-23 15:55:26
    Elasticsearch 默认安装后设置... 这里有两种方式修改 Elasticsearch 的堆内存。最简单的一个方法就是指定 ES_HEAP_SIZE 环境变量。服务进程在启动时候会读取这个变量,并相应的设置堆的大小。 比如,你可以用下...
  • SSL 配置优化的若干建议

    万次阅读 2018-01-28 22:26:34
    如果你配置SSL只是为了网站的网址前一把锁的标志,那不如直接送你把锁好了。 别想了,这句话不是哪个安全专家说的,是我说的(逃) 今天写一篇文章记录一下自己 SSL 的配置优化过程。以下设置均为 Nginx 的...
  • apache 优化配置 prefork模式

    千次阅读 2014-06-25 20:00:14
    (一)prefork模式下(其他模式下不适用),apache需要优化的主要参数:  ServerLimit 3000  StartServers 750  MinSpareServers 5  MaxSpareServers 100  MaxClients 3000  MaxRequestsPerChild 10000  ...
  • JVM优化配置(转)

    千次阅读 2011-06-22 14:50:00
    JVM优化配置(转)2008年01月25日 星期五 下午 03:56JVM优化配置《一》OOM这个缩写就是Java程序开发过程中让人最头痛的问题:Out of Memory。在很多开发人员的开发过程中,或多或少的都会遇到这类问题,这类问题定位...
  • Tomcat 优化方案 和 配置详解

    万次阅读 2016-05-18 10:59:13
    Server.xml配置文件用于对整个容器进行相关的配置。 元素: 是整个配置文件的根元素。表示整个Catalina容器。 属性: className:实现了org.apache.catalina.Server接口的类名,标准实现类是org.apache....
  • Nginx核心配置深入理解及优化

    万次阅读 2016-07-10 22:58:52
    Nginx的配置是以模块为单位来组织的,每一个模块包含一个或多个指令,指令是配置文件中的最小配置单元,一切配置项皆为指令。如http核心模块中的include、default_type、sendfile指令,都属于http模块。nginx所有...
  • 开心一笑 提出问题 解决问题 前言 结束语 读书感悟 经典故事 ...如果带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!
  • 一、Tomcat并发优化tomcat并发量与其配置息息相关,一般的机器几百的并发量足矣,如果设置太高可能引发各种问题,内存、网络等问题也能在高并发下暴露出来,因此,配置参数的设置非常重要。(1) tomcat并发参数...
  • MySQL 高并发配置优化

    千次阅读 2018-06-07 16:27:49
    最近在搞一个报表系统,不是很负责,但是就是数据量比较大,单次写入上万条数据,加上在同一个事务里面,部署到linux服务器后,发现特别慢,后面发现mysql安装后没有优化配置文件,导致写入特别慢。服务器mysql版本...
  • php-fpm的配置优化

    千次阅读 2018-06-17 15:30:57
    静态适用于大内存机器,动态创建回收进程对服务器资源也是一消耗。 如果你的内存很大,8-20G,按照一个php-fpm进程20M算,100个就2G内存了,那就可以开启static模式。如果你的内存很小,比如才256M,那就要...
  • YARN内存使用优化配置

    千次阅读 2015-10-22 19:09:02
    在Hadoop2.0中, YARN负责管理MapReduce中的资源(内存, CPU等)并且将其打包成Container. 这样可以精简MapReduce, 使之专注于其擅长的数据处理任务, 将无需考虑资源调度. 如下图所示  YARN会管理集群中所有机器的...
  • 由于没有考虑各个标的风险的不同,标的之间的相关性,并未较好的解决鸡蛋在一个篮子里的问题,若是稍加关注一下对组合权重的处理,就会考虑到各标的间的涨跌是否本身就较强关联这样的问题,这个时候就是需要研究各...
  • 基于网上的技术文章思路,自己加以整理,常用的和不常用的策略,供参考。nginx的优化1. gzip压缩优化 2. expires缓存还 3. 网络IO事件模型优化 4. 隐藏软件名称和版本号 5. 防盗链优化 6. 禁止恶意域名...
  • Tomcat简介、服务部署、虚拟主机配置及相关配置文件参数优化一、Tomcat 简介核心的组件二、Tomcat 服务部署安装1、关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下2、安装JDK3、设置JDK环境变量4、安装启动...
  • spring静态资源配置

    千次阅读 2018-08-21 13:05:23
    由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往使用 *.do 、 *.xhtml等方式。这就决定了请求URL必须是一个带后缀的URL,而无法采用真正的REST风格的URL。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 274,527
精华内容 109,810
关键字:

优化资源配置有哪两种