面试时常常问到的系统应用优化问题总结

优化

本文 centos 6.5 优化 的项有18处:javascript

  1. centos6.5最小化安装后启动网卡
  2. ifconfig查询IP进行SSH连接
  3. 更新系统源而且升级系统
  4. 系统时间更新和设定定时任
  5. 修改ip地址、网关、主机名、DNS
  6. 关闭selinux,清空iptables
  7. 建立普通用户并进行sudo受权管理
  8. 修改SSH端口号和屏蔽root帐号远程登录
  9. 锁定关键文件系统(禁止非受权用户得到权限)
  10. 精简开机自启动服务
  11. 调整系统文件描述符大小
  12. 设置系统字符集
  13. 清理登录的时候显示的系统及内核版本
  14. 内核参数优化
  15. 定时清理/var/spool/clientmqueue(6之后无需)
  16. 删除没必要要的系统用户和群组
  17. 关闭重启ctl-alt-delete组合键
  18. 设置一些全局变量

tomcat

JVM参数,调整初始值和最大值:Xmx(最大 Xms(初始)php

-Xms JVM初始化堆内存大小 
-Xmx JVM堆的最大内存 
-Xss 线程栈大小 
-XX:PermSize JVM非堆区初始内存分配大小 
-XX:MaxPermSize JVM非堆区最大内存

关闭自动部署unpackWARs="true" autoDeploy="true"css

最大线程数,最大排队数:`max_thread(默认值是200) acceptCounthtml

connector运行模式:BIO(同步阻塞,消耗资源要高) NIO(同步非阻塞,链接数目多且比较短适合) APR(异步非阻塞,链接数目多且链接时间长)java

网络连接超时时间:connectionTimeoutnode

关闭DNS反查询:enableLookupsmysql

保持长链接的时间:keepAliveTimeoutlinux

空闲等待线程数:minSpaceThreadnginx

nginx优化

user nginx;
pid /var/run/nginx.pid;
#通常为cpu的内核数
worker_processes auto;

#修改work进程的最大文件打开数量
worker_rlimit_nofile 100000;

events {
    #每一个work进程的最大链接数
    worker_connections 2048;
    #告诉nginx收到一个新链接通知后接受尽量多的链接
    multi_accept on;
    #使用异步I/O多路复用
    use epoll;
}

http {
     #关闭在错误页面中的nginx版本数字
    server_tokens off;
    #开启 当即将数据从磁盘读到OS缓存
    sendfile on;
    #nginx在一个数据包里发送全部头文件,而不一个接一个的发送
    tcp_nopush on;
    #nginx不要缓存数据,而是一段一段的发送
    tcp_nodelay on;
    
    #日志设置
    access_log off;
    error_log /var/log/nginx/error.log crit;
    
     #给客户端分配keep-alive连接超时时间
    keepalive_timeout 10;
    #设置请求头和请求体(各自)的超时时间
    client_header_timeout 10;
    client_body_timeout 10;
    #关闭不响应的客户端链接。
    reset_timedout_connection on;
    #指定客户端的响应超时时间
    send_timeout 10;

     #设置用于保存各类key(好比当前链接数)的共享内存的参数
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    #为给定的key设置最大链接数
    limit_conn addr 100;
    
     #加载mime文件,设置字符集,设置默认的mime类型
    include /etc/nginx/mime.types;
    default_type text/html;
    charset UTF-8;

     #开启压缩
    gzip on;
    #指定客户端禁用,提升兼容性
    gzip_disable "msie6";
    # 容许或者禁止压缩基于请求和响应的响应流
    gzip_proxied any;
    #设置对数据启用压缩的最少字节数
    gzip_min_length 1000;
    #设置数据的压缩等级
    gzip_comp_level 6;
    #设置须要压缩的数据格式
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    
    #打开缓存的同时也指定了缓存最大数目,以及缓存的时间
    open_file_cache max=100000 inactive=20s;
    #指定检测正确信息的间隔时间
    open_file_cache_valid 30s;
    #指令参数不活动时间期间里最小的文件数
    open_file_cache_min_uses 2;
    #是否缓存错误信息,也包括再次给配置中添加文件
    open_file_cache_errors on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

linux内核优化

#设置内核所容许的最大共享内存段的大小
kernel.shmall = 268435456

# 开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1

#修改消息队列长度
kernel.msgmnb = 65536
kernel.msgmax = 65536

#开启syn cookies,防止syn攻击
net.ipv4.tcp_syncookies = 1
#开启time-wait ,容许socket重用
net.ipv4.tcp_tw_reuse = 1
#开启socket快速回收
net.ipv4.tcp_tw_recycle = 1
#定义保持在fin_wait_2的时间
net.ipv4.tcp_fin_timeout = 30
#修改会话保持时间,默认2小时
net.ipv4.tcp_keepalive_time = 1200
#修改对外链接端口范围
net.ipv4.ip_local_port_range = 1024 65000
#修改系统同时保持time_out套接字的最大数量
net.ipv4.tcp_max_tw_buckets = 5000

#设置tcp内存单位阀值,低于第一无压力,在第二值进入压力,大于第三个值TCP不分配socket
net.ipv4.tcp_mem = 786432 1048576 1572864

#最大socket写buffer缓冲
net.core.wmem_max = 873200
#最大读buffer
net.core.rmem_max = 873200
#最大tcp写buffer
net.ipv4.tcp_wmem = 8192 436600 873200
#最大读buffer
net.ipv4.tcp_rmem = 32768 436600 873200

net.core.somaxconn = 256
net.core.netdev_max_backlog = 1000
#设置syn消息列队的长度
net.ipv4.tcp_max_syn_backlog = 2048
# 在内核放弃创建链接以前发送SYN 包的数量
net.ipv4.tcp_retries2 = 5

#设置请求探测的时间间隔和请求重发次数
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

#关闭路由相关功能
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0

#禁用IPV4转发
net.ipv4.ip_forward = 0

#如下参数是对centos6.x的iptables防火墙的优化,防火墙不开会有提示,能够忽略不理。
#若是是centos5.X须要吧netfilter.nf_conntrack替换成ipv4.netfilter.ip
#centos5.X为net.ipv4.ip_conntrack_max = 25000000
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.ipv4.tcp_syncookies = 1
#表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少许SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1
#表示开启重用。容许将TIME-WAIT sockets从新用于新的TCP链接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1
#表示开启TCP链接中TIME-WAIT sockets的快速回收,默认为0,表示关闭;

net.ipv4.tcp_fin_timeout
#修改系统默认的 TIMEOUT 时间。
###########
#在通过这样的调整以后,除了会进一步提高服务器的负载能力以外,还可以防护小流量程度的DoS、CC和SYN攻击。
########
此外,若是你的链接数自己就不少,咱们能够再优化一下TCP的可以使用端口范围,进一步提高服务器的并发能力。依然是往上面的参数文件中,加入下面这些配置:
##################

net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
#这几个参数,建议只在流量很是大的服务器上开启,会有显著的效果。通常的流量小的服务器上,没有必要去设置这几个参数。

net.ipv4.tcp_keepalive_time = 1200
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改成20分钟。
net.ipv4.ip_local_port_range = 10000 65000
#表示用于向外链接的端口范围。缺省状况下很小:32768到61000,改成10000到65000。(注意:这里不要将最低值设的过低,不然可能会占用掉正常的端口!)

net.ipv4.tcp_max_syn_backlog = 8192
#表示SYN队列的长度,默认为1024,加大队列长度为8192,能够容纳更多等待链接的网络链接数。

net.ipv4.tcp_max_tw_buckets = 6000
#表示系统同时保持TIME_WAIT的最大数量,若是超过这个数字,TIME_WAIT将马上被清除并打印警告信息。默 认为180000,改成6000。对于Apache、Nginx等服务器,上几行的参数能够很好地减小TIME_WAIT套接字数量,可是对于Squid,效果却不大。此项参数能够控制TIME_WAIT的最大数量,避免Squid服务器被大量的TIME_WAIT拖死。

#####################
内核其余TCP参数说明:
net.ipv4.tcp_max_syn_backlog = 65536
#记录的那些还没有收到客户端确认信息的链接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。

net.core.netdev_max_backlog = 32768
#每一个网络接口接收数据包的速率比内核处理这些包的速率快时,容许送到队列的数据包的最大数目。

net.core.somaxconn = 32768
#web应用中listen函数的backlog默认会给咱们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,因此有必要调整这个值。

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216           
#最大socket读buffer,可参考的优化值:873200

net.core.wmem_max = 16777216           
#最大socket写buffer,可参考的优化值:873200

net.ipv4.tcp_timestsmps = 0
#时间戳能够避免序列号的卷绕。一个1Gbps的链路确定会遇到之前用过的序列号。时间戳可以让内核接受这种“异常”的数据包。这里须要将其关掉。

net.ipv4.tcp_synack_retries = 2
#为了打开对端的链接,内核须要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃链接以前发送SYN+ACK包的数量。

net.ipv4.tcp_syn_retries = 2
#在内核放弃创建链接以前发送SYN包的数量。
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
# 开启重用。容许将TIME-WAIT sockets从新用于新的TCP链接。

net.ipv4.tcp_wmem = 8192 436600 873200
# TCP写buffer,可参考的优化值: 8192 436600 873200

net.ipv4.tcp_rmem  = 32768 436600 873200
# TCP读buffer,可参考的优化值: 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000

# 一样有3个值,意思是:
net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力。
net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段。
net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket。
上述内存单位是页,而不是字节。可参考的优化值是:786432 1048576 1572864

net.ipv4.tcp_max_orphans = 3276800
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。
#若是超过这个数字,链接将即刻被复位并打印出警告信息。
#这个限制仅仅是为了防止简单的DoS攻击,不能过度依靠它或者人为地减少这个值,
#更应该增长这个值(若是增长了内存以后)。

net.ipv4.tcp_fin_timeout = 30
#若是套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端能够出错并永远不关闭链接,甚至意外当机。缺省值是60秒。2.2 内核的一般值是180秒,你能够按这个设置,但要记住的是,即便你的机器是一个轻载的WEB服务器,也有由于大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,由于它最多只能吃掉1.5K内存,可是它们的生存期长些。

PHP优化

下面开始优化php配置,vi php/etc/php-fpm.confweb

#若是dm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效,若是dm设置为static,那么只有pm.max_children这个参数生效。
pm=dynamic
#设置php-fpm初始/空闲/最大worker进程数
#静态方式下开启的php-fpm进程数量。
pm.max_children = 300
#动态方式下的起始php-fpm进程数量。
pm.start_servers = 20
#动态方式下的最小php-fpm进程数量。
pm.min_spare_servers = 5
#动态方式下的最大php-fpm进程数量
pm.max_spare_servers = 35


##增大php-fpm对打开文件描述符的限制
rlimit_files = 65536

##设置容许访问Fastcgi进程解析器的IP地址,更加安全
listen.allowed_clients = 127.0.0.1

##增大请求缓冲队列大小,默认为128,有点小,增大这个参数,能够解决系统日志中攻击提示问题以及nginx错误日志中的连接错误。
listen.backlog = 2048

#真大最大请求数      
pm.max_requests = 1024由 500改成1024

nginx.conf fastCGI设置:

fastcgi_temp_path /dev/shm/fastcgi_temp;
#cache设置
fastcgi_cache_path /dev/shm/fastcgi_cache levels=1:2
keys_zone=cfcache:10m inactive=50m max_size=256;
//为FastCGI缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。以及最大占用空间。
fastcgi_cache_key “$request_method://$host$request_uri”;
fastcgi_cache_methods GET HEAD;
fastcgi_cache   cfcache;  //开启FastCGI缓存而且为其制定一个名称。
fastcgi_cache_valid 200 302 301 1h;
fastcgi_cache_valid   any 5m;   //为指定应答代码指定缓存时间,这里指定200 302 301应答缓存1小时,其他任何应答缓存5分钟
fastcgi_cache_min_uses  1;  //缓存在fastcgi_cache_path内文件在inactive参数值时间内的最少使用次数,如上例,这里在50分钟内某文件1次也没有被使用,那么这个文件将被移除。
fastcgi_cache_use_stale error  timeout invalid_header http_500;//对于error timeout invalid_header http_500等类型的应答内容不缓存
fastcgi_ignore_client_abort on;//忽略客户端终止请求
#指定链接到后端FastCGI的超时时间
fastcgi_connect_timeout 300;
#向FastCGI传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI传送请求的超时时间。
fastcgi_send_timeout 300;
#接收FastCGI应答的超时时间,这个值是指已经完成两次握手后接收FastCGI应答的超时时间。
fastcgi_read_timeout 300;
#指定读取FastCGI应答第一部分须要用多大的缓冲区
fastcgi_buffer_size 64k;
#指定本地须要用多少和多大的缓冲区来缓冲FastCGI的应答,
fastcgi_buffers 4 64k;
#默认值是fastcgi_buffers的两倍
fastcgi_busy_buffers_size 128k;
#在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size 128k;

fastcgi_intercept_errors on;

mysql优化

[b]PS:本配置文件针对Dell R710,双至强E5620、16G内存的硬件配置。CentOS 5.6 64位系统,MySQL 5.5.x 稳定版。适用于日IP 50-100w,PV 100-300w的站点,主要使用InnoDB存储引擎。其余应用环境请根据实际状况来设置优化。[/b]  
  
# 如下选项会被MySQL客户端应用读取。  
# 注意只有MySQL附带的客户端应用程序保证能够读取这段内容。  
# 若是你想你本身的MySQL应用程序获取这些值。  
# 须要在MySQL客户端库初始化的时候指定这些选项。  
  
#  
[client]  
#password = [your_password]  
port = @MYSQL_TCP_PORT@  
socket = @MYSQL_UNIX_ADDR@  
  
# *** 应用定制选项 ***  
  
#  
# MySQL 服务端  
#  
[mysqld]  
  
# 通常配置选项  
port = @MYSQL_TCP_PORT@  
socket = @MYSQL_UNIX_ADDR@  
  
# back_log 是操做系统在监听队列中所能保持的链接数,  
# 队列保存了在MySQL链接管理器线程处理以前的链接.  
# 若是你有很是高的链接率而且出现”connection refused” 报错,  
# 你就应该增长此处的值.  
# 检查你的操做系统文档来获取这个变量的最大值.  
# 若是将back_log设定到比你操做系统限制更高的值,将会没有效果  
back_log = 300  
  
# 不在TCP/IP端口上进行监听.  
# 若是全部的进程都是在同一台服务器链接到本地的mysqld,  
# 这样设置将是加强安全的方法  
# 全部mysqld的链接都是经过Unix sockets 或者命名管道进行的.  
# 注意在windows下若是没有打开命名管道选项而只是用此项  
# (经过 “enable-named-pipe” 选项) 将会致使mysql服务没有任何做用!  
#skip-networking  
  
# MySQL 服务所容许的同时会话数的上限  
# 其中一个链接将被SUPER权限保留做为管理员登陆.  
# 即使已经达到了链接数的上限.  
max_connections = 3000  

# 每一个客户端链接最大的错误容许数量,若是达到了此限制.  
# 这个客户端将会被MySQL服务阻止直到执行了”FLUSH HOSTS” 或者服务重启  
# 非法的密码以及其余在连接时的错误会增长此值.  
# 查看 “Aborted_connects” 状态来获取全局计数器.  
max_connect_errors = 30  
  
# 全部线程所打开表的数量.  
# 增长此值就增长了mysqld所须要的文件描述符的数量  
# 这样你须要确认在[mysqld_safe]中 “open-files-limit” 变量设置打开文件数量容许至少4096  
table_cache = 4096  
  
# 容许外部文件级别的锁. 打开文件锁会对性能形成负面影响  
# 因此只有在你在一样的文件上运行多个数据库实例时才使用此选项(注意仍会有其余约束!)  
# 或者你在文件层面上使用了其余一些软件依赖来锁定MyISAM表  
#external-locking  
  
# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一块儿工做时至关必要)  
# 每一个链接独立的大小.大小动态增长  
max_allowed_packet = 32M  
  
# 在一个事务中binlog为了记录SQL状态所持有的cache大小  
# 若是你常用大的,多声明的事务,你能够增长此值来获取更大的性能.  
# 全部从事务来的状态都将被缓冲在binlog缓冲中而后在提交后一次性写入到binlog中  
# 若是事务比此值大, 会使用磁盘上的临时文件来替代.  
# 此缓冲在每一个链接的事务第一次更新状态时被建立  
binlog_cache_size = 4M  
  
# 独立的内存表所容许的最大容量.  
# 此选项为了防止意外建立一个超大的内存表致使永尽全部的内存资源.  
max_heap_table_size = 128M  
  
# 排序缓冲被用来处理相似ORDER BY以及GROUP BY队列所引发的排序  
# 若是排序后的数据没法放入排序缓冲,  
# 一个用来替代的基于磁盘的合并分类会被使用  
# 查看 “Sort_merge_passes” 状态变量.  
# 在排序发生时由每一个线程分配  
sort_buffer_size = 16M  
  
# 此缓冲被使用来优化全联合(full JOINs 不带索引的联合).  
# 相似的联合在极大多数状况下有很是糟糕的性能表现,  
# 可是将此值设大可以减轻性能影响.  
# 经过 “Select_full_join” 状态变量查看全联合的数量  
# 当全联合发生时,在每一个线程中分配  
join_buffer_size = 16M  
  
# 咱们在cache中保留多少线程用于重用  
# 当一个客户端断开链接后,若是cache中的线程还少于thread_cache_size,  
# 则客户端线程被放入cache中.  
# 这能够在你须要大量新链接的时候极大的减小线程建立的开销  
# (通常来讲若是你有好的线程模型的话,这不会有明显的性能提高.)  
thread_cache_size = 16  
  
# 此容许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.  
# 此值只对于支持 thread_concurrency() 函数的系统有意义( 例如Sun Solaris).  
# 你可能够尝试使用 [CPU数量]*(2..4) 来做为thread_concurrency的值  
thread_concurrency = 8  
  
# 查询缓冲常被用来缓冲 SELECT 的结果而且在下一次一样查询的时候再也不执行直接返回结果.  
# 打开查询缓冲能够极大的提升服务器速度, 若是你有大量的相同的查询而且不多修改表.  
# 查看 “Qcache_lowmem_prunes” 状态变量来检查是否当前值对于你的负载来讲是否足够高.  
# 注意: 在你表常常变化的状况下或者若是你的查询原文每次都不一样,  
# 查询缓冲也许引发性能降低而不是性能提高.  
query_cache_size = 128M  
  
# 只有小于此设定值的结果才会被缓冲  
# 此设置用来保护查询缓冲,防止一个极大的结果集将其余全部的查询结果都覆盖.  
query_cache_limit = 4M  
  
# 被全文检索索引的最小的字长.  
# 你也许但愿减小它,若是你须要搜索更短字的时候.  
# 注意在你修改此值以后,  
# 你须要重建你的 FULLTEXT 索引  
ft_min_word_len = 8  
  
# 若是你的系统支持 memlock() 函数,你也许但愿打开此选项用以让运行中的mysql在在内存高度紧张的时候,数据在内存中保持锁定而且防止可能被swapping out  
# 此选项对于性能有益  
#memlock  
  
# 当建立新表时做为默认使用的表类型,  
# 若是在建立表示没有特别执行表类型,将会使用此值  
default_table_type = MYISAM  
  
# 线程使用的堆大小. 此容量的内存在每次链接时被预留.  
# MySQL 自己常不会须要超过64K的内存  
# 若是你使用你本身的须要大量堆的UDF函数  
# 或者你的操做系统对于某些操做须要更多的堆,  
# 你也许须要将其设置的更高一点.  
thread_stack = 512K  
  
# 设定默认的事务隔离级别.可用的级别以下:  
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE  
transaction_isolation = REPEATABLE-READ  
  
# 内部(内存中)临时表的最大大小  
# 若是一个表增加到比此值更大,将会自动转换为基于磁盘的表.  
# 此限制是针对单个表的,而不是总和.  
tmp_table_size = 128M  
  
# 打开二进制日志功能.  
# 在复制(replication)配置中,做为MASTER主服务器必须打开此项  
# 若是你须要从你最后的备份中作基于时间点的恢复,你也一样须要二进制日志.  
log-bin=mysql-bin  
  
# 若是你在使用链式从服务器结构的复制模式 (A->B->C),  
# 你须要在服务器B上打开此项.  
# 此选项打开在从线程上重作过的更新的日志,  
# 并将其写入从服务器的二进制日志.  
#log_slave_updates  
  
# 打开全查询日志. 全部的由服务器接收到的查询 (甚至对于一个错误语法的查询)  
# 都会被记录下来. 这对于调试很是有用, 在生产环境中经常关闭此项.  
#log  
  
# 将警告打印输出到错误log文件. 若是你对于MySQL有任何问题  
# 你应该打开警告log而且仔细审查错误日志,查出可能的缘由.  
#log_warnings  
  
# 记录慢速查询. 慢速查询是指消耗了比 “long_query_time” 定义的更多时间的查询.  
# 若是 log_long_format 被打开,那些没有使用索引的查询也会被记录.  
# 若是你常常增长新查询到已有的系统内的话. 通常来讲这是一个好主意,  
log_slow_queries  
  
# 全部的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.  
# 不要在这里使用”1″, 不然会致使全部的查询,甚至很是快的查询页被记录下来(因为MySQL 目前时间的精确度只能达到秒的级别).  
long_query_time = 6  
  
# 在慢速日志中记录更多的信息.  
# 通常此项最好打开.  
# 打开此项会记录使得那些没有使用索引的查询也被做为到慢速查询附加到慢速日志里  
log_long_format  
  
# 此目录被MySQL用来保存临时文件.例如,  
# 它被用来处理基于磁盘的大型排序,和内部排序同样.  
# 以及简单的临时表.  
# 若是你不建立很是大的临时文件,将其放置到 swapfs/tmpfs 文件系统上也许比较好  
# 另外一种选择是你也能够将其放置在独立的磁盘上.  
# 你可使用”;”来放置多个路径  
# 他们会按照roud-robin方法被轮询使用.  
#tmpdir = /tmp  
  
# *** 主从复制相关的设置  
  
# 惟一的服务辨识号,数值位于 1 到 2^32-1之间.  
# 此值在master和slave上都须要设置.  
# 若是 “master-host” 没有被设置,则默认为1, 可是若是忽略此选项,MySQL不会做为master生效.  
server-id = 1  
  
# 复制的Slave (去掉master段的注释来使其生效)  
#  
# 为了配置此主机做为复制的slave服务器,你能够选择两种方法:  
#  
# 1) 使用 CHANGE MASTER TO 命令 (在咱们的手册中有完整描述) -  
# 语法以下:  
#  
# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,  
# MASTER_USER=, MASTER_PASSWORD= ;  
#  
# 你须要替换掉 , , 等被尖括号包围的字段以及使用master的端口号替换 (默认3306).  
#  
# 例子:  
#  
# CHANGE MASTER TO MASTER_HOST=’125.564.12.1′, MASTER_PORT=3306,  
# MASTER_USER=’joe’, MASTER_PASSWORD=’secret’;  
#  
# 或者  
#  
# 2) 设置如下的变量. 不论如何, 在你选择这种方法的状况下, 而后第一次启动复制(甚至不成功的状况下,  
# 例如若是你输入错密码在master-password字段而且slave没法链接),  
# slave会建立一个 master.info 文件,而且以后任何对于包含在此文件内的参数的变化都会被忽略  
# 而且由 master.info 文件内的内容覆盖, 除非你关闭slave服务, 删除 master.info 而且重启slave 服务.  
# 因为这个缘由,你也许不想碰一下的配置(注释掉的) 而且使用 CHANGE MASTER TO (查看上面) 来代替  
#  
# 所须要的惟一id号位于 2 和 2^32 – 1之间  
# (而且和master不一样)  
# 若是master-host被设置了.则默认值是2  
# 可是若是省略,则不会生效  
#server-id = 2  
#  
# 复制结构中的master – 必须  
#master-host =  
#  
# 当链接到master上时slave所用来认证的用户名 – 必须  
#master-user =  
#  
# 当链接到master上时slave所用来认证的密码 – 必须  
#master-password =  
#  
# master监听的端口.  
# 可选 – 默认是3306  
#master-port =  
  
# 使得slave只读.只有用户拥有SUPER权限和在上面的slave线程可以修改数据.  
# 你可使用此项去保证没有应用程序会意外的修改slave而不是master上的数据  
#read_only  
  
#*** MyISAM 相关选项  
  
# 关键词缓冲的大小, 通常用来缓冲MyISAM表的索引块.  
# 不要将其设置大于你可用内存的30%,  
# 由于一部份内存一样被OS用来缓冲行数据  
# 甚至在你并不使用MyISAM 表的状况下, 你也须要仍旧设置起 8-64M 内存因为它一样会被内部临时磁盘表使用.  
key_buffer_size = 128M  
  
# 用来作MyISAM表全表扫描的缓冲大小.  
# 当全表扫描须要时,在对应线程中分配.  
read_buffer_size = 8M  
  
# 当在排序以后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止磁盘寻道.  
# 若是你增高此值,能够提升不少ORDER BY的性能.  
# 当须要时由每一个线程分配  
read_rnd_buffer_size = 64M  
  
# MyISAM 使用特殊的相似树的cache来使得突发插入  
# (这些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA  
# INFILE) 更快. 此变量限制每一个进程中缓冲树的字节数.  
# 设置为 0 会关闭此优化.  
# 为了最优化不要将此值设置大于 “key_buffer_size”.  
# 当突发插入被检测到时此缓冲将被分配.  
bulk_insert_buffer_size = 256M  
  
# 此缓冲当MySQL须要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引发重建索引时被分配.  
# 这在每一个线程中被分配.因此在设置大值时须要当心.  
myisam_sort_buffer_size = 256M  
  
# MySQL重建索引时所容许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).  
# 若是文件大小比此值更大,索引会经过键值缓冲建立(更慢)  
myisam_max_sort_file_size = 10G  
  
# 若是被用来更快的索引建立索引所使用临时文件大于制定的值,那就使用键值缓冲方法.  
# 这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来建立索引.  
myisam_max_extra_sort_file_size = 10G  
  
# 若是一个表拥有超过一个索引, MyISAM 能够经过并行排序使用超过一个线程去修复他们.  
# 这对于拥有多个CPU以及大量内存状况的用户,是一个很好的选择.  
myisam_repair_threads = 1  
  
# 自动检查和修复没有适当关闭的 MyISAM 表.  
myisam_recover  
  
# 默认关闭 Federated  
skip-federated  
  
# *** BDB 相关选项 ***  
  
# 若是你运行的MySQL服务有BDB支持可是你不许备使用的时候使用此选项. 这会节省内存而且可能加速一些事.  
skip-bdb  
  
# *** INNODB 相关选项 ***  
  
# 若是你的MySQL服务包含InnoDB支持可是并不打算使用的话,  
# 使用此选项会节省内存以及磁盘空间,而且加速某些部分  
#skip-innodb  
  
# 附加的内存池被InnoDB用来保存 metadata 信息  
# 若是InnoDB为此目的须要更多的内存,它会开始从OS这里申请内存.  
# 因为这个操做在大多数现代操做系统上已经足够快, 你通常不须要修改此值.  
# SHOW INNODB STATUS 命令会显示当先使用的数量.  
innodb_additional_mem_pool_size = 64M  
  
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.  
# 这里你设置越大,你在存取表里面数据时所须要的磁盘I/O越少.  
# 在一个独立使用的数据库服务器上,你能够设置这个变量到服务器物理内存大小的80%  
# 不要设置过大,不然,因为物理内存的竞争可能致使操做系统的换页颠簸.  
# 注意在32位系统上你每一个进程可能被限制在 2-3.5G 用户层面内存限制,  
# 因此不要设置的过高.  
innodb_buffer_pool_size = 6G  
  
# InnoDB 将数据保存在一个或者多个数据文件中成为表空间.  
# 若是你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.  
# 其余状况下.每一个设备一个文件通常都是个好的选择.  
# 你也能够配置InnoDB来使用裸盘分区 – 请参考手册来获取更多相关内容  
innodb_data_file_path = ibdata1:10M:autoextend  
  
# 设置此选项若是你但愿InnoDB表空间文件被保存在其余分区.  
# 默认保存在MySQL的datadir中.  
#innodb_data_home_dir =  
  
# 用来同步IO操做的IO线程的数量. This value is  
# 此值在Unix下被硬编码为4,可是在Windows磁盘I/O可能在一个大数值下表现的更好.  
innodb_file_io_threads = 4  
  
# 若是你发现InnoDB表空间损坏, 设置此值为一个非零值可能帮助你导出你的表.  
# 从1开始而且增长此值知道你可以成功的导出表.  
#innodb_force_recovery=1  
  
# 在InnoDb核心内的容许线程数量.  
# 最优值依赖于应用程序,硬件以及操做系统的调度方式.  
# 太高的值可能致使线程的互斥颠簸.  
innodb_thread_concurrency = 16  
  
# 若是设置为1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上,  
# 这提供了完整的ACID行为.  
# 若是你愿意对事务安全折衷, 而且你正在运行一个小的食物, 你能够设置此值到0或者2来减小由事务日志引发的磁盘I/O  
# 0表明日志只大约每秒写入日志文件而且日志文件刷新到磁盘.  
# 2表明日志写入日志文件在每次提交后,可是日志文件只有大约每秒才会刷新到磁盘上.  
innodb_flush_log_at_trx_commit = 2  
(说明:若是是游戏服务器,建议此值设置为2;若是是对数据安全要求极高的应用,建议设置为1;设置为0性能最高,但若是发生故障,数据可能会有丢失的危险!默认值1的意思是每一次事务提交或事务外的指令都须要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。设成2对于不少运用,特别是从MyISAM表转过来的是能够的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬盘,因此你通常不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即便MySQL挂了也可能会丢失事务的数据。而值2只会在整个操做系统挂了时才可能丢数据。)  
  
# 加速InnoDB的关闭. 这会阻止InnoDB在关闭时作全清除以及插入缓冲合并.  
# 这可能极大增长关机时间, 可是取而代之的是InnoDB可能在下次启动时作这些操做.  
#innodb_fast_shutdown  
  
# 用来缓冲日志数据的缓冲区的大小.  
# 当此值快满时, InnoDB将必须刷新数据到磁盘上.  
# 因为基本上每秒都会刷新一次,因此没有必要将此值设置的太大(甚至对于长事务而言)  
  
innodb_log_buffer_size = 16M  
  
# 在日志组中每一个日志文件的大小.  
# 你应该设置日志文件总合大小到你缓冲池大小的25%~100%  
# 来避免在日志文件覆写上没必要要的缓冲池刷新行为.  
# 不论如何, 请注意一个大的日志文件大小会增长恢复进程所须要的时间.  
innodb_log_file_size = 512M  
  
# 在日志组中的文件总数.  
# 一般来讲2~3是比较好的.  
innodb_log_files_in_group = 3  
  
# InnoDB的日志文件所在位置. 默认是MySQL的datadir.  
# 你能够将其指定到一个独立的硬盘上或者一个RAID1卷上来提升其性能  
#innodb_log_group_home_dir  
  
# 在InnoDB缓冲池中最大容许的脏页面的比例.  
# 若是达到限额, InnoDB会开始刷新他们防止他们妨碍到干净数据页面.  
# 这是一个软限制,不被保证绝对执行.  
innodb_max_dirty_pages_pct = 90  
  
# InnoDB用来刷新日志的方法.  
# 表空间老是使用双重写入刷新方法  
# 默认值是 “fdatasync”, 另外一个是 “O_DSYNC”.  
#innodb_flush_method=O_DSYNC  
  
# 在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久.  
# InnoDB在其拥有的锁表中自动检测事务死锁而且回滚事务.  
# 若是你使用 LOCK TABLES 指令, 或者在一样事务中使用除了InnoDB之外的其余事务安全的存储引擎  
# 那么一个死锁可能发生而InnoDB没法注意到.  
# 这种状况下这个timeout值对于解决这种问题就很是有帮助.  
innodb_lock_wait_timeout = 120  
  
[mysqldump]  
# 不要在将内存中的整个结果写入磁盘以前缓存. 在导出很是巨大的表时须要此项  
quick  
  
max_allowed_packet = 32M  
  
[mysql]  
no-auto-rehash  
  
# 仅仅容许使用键值的 UPDATEs 和 DELETEs .  
#safe-updates  
  
[isamchk]  
key_buffer = 2048M  
sort_buffer_size = 2048M  
read_buffer = 32M  
write_buffer = 32M  
  
[myisamchk]  
key_buffer = 2048M  
sort_buffer_size = 2048M  
read_buffer = 32M  
write_buffer = 32M  
  
[mysqlhotcopy]  
interactive-timeout  
  
[mysqld_safe]  
# 增长每一个进程的可打开文件数量.  
# 警告: 确认你已经将全系统限制设定的足够高!  
# 打开大量表须要将此值设大  
open-files-limit = 8192
相关文章
相关标签/搜索