一般来讲Unix/linux与Apache配合的更好,而Windows与原生的IIS服务器配合会更好,这个更好是相对默认设置来讲,很多国内外的服务器都选择采用Linux系统,相比于windows的图形化界面,Linux的命令行需要更多的程序基础和学习成本,Windows系统上面按以往Unix/linux的经验配置Apache时,由于两个系统的内存回收机制和进程管理的不同,一些参数需要重新配置。
Apache
1.在 httpd.conf 中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。
2.修改 conf/exrtra目录下面的 http-mpm.conf (这个文件负责控制 线程数 )
在Windows系统中,起作用的是Winnt mpm段
ThreadsPerChild 150
MaxRequestsPerChild 0
以上是默认的配置,一般情况下够用了,但负荷较大的网站就需要修改了,否则访问网站会变慢或没有响应。实际设置中可以根据apache-status查看apache实时连接状态,查看其中线程占用数目情况来进行相应的调整,我的服务器最后设置如下:
#ThreadLimit 350
ThreadsPerChild 350
MaxRequestsPerChild 10000
其中ThreadLimit是占用系统线程数限制。
注意:Apache在编译时内部有一个硬性的限制”ThreadLimit 20000″(对于mpm_winnt是”ThreadLimit 15000″),你不能超越这个限制。
ThreadsPerChlid是Apache进程的子线程数,这个指令设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。我们应该修改另一个配置文件httpd-default.php中的超时设置来配合这个参数。
MaxRequestsPerChild是进程的最大的请求数目,既指网站收到请求的缓存数。设置太小了会影响服务器性能,因为会占用较多cpu时间,太大了则会占用内存资源。
将MaxRequestsPerChild设置成非零值有两个好处:
a)可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
b)给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
需要设置如下参数:
Timeout 20
KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 5
Timeout 参数为连接超时,缺省的300秒显然太大,缩小该参数就会减少同时连接数,即用户实际占用的线程数,这样就可以起到配合上面ThreadsPerChlid参数的作用。
KeepAlive 参数为是否保持活连接,目前网站中一个页面一般会包含多个文件,所以相应用户访问时会有多个请求,因此开启可以提高服务器性能。
MaxKeepAliveRequests 参数为最大的活连接请求数,可以根据网页实际包含的文件数目自行调节。
KeepAliveTimeout 该参数为活连接的超时时间,一般只要设置成小于Timeout即可。
这样设置后,Apache在响应请求和防止恶意攻击方面就取得较为平衡的效果,当然由于内存回收机制和进程管理不同,Windows下长期运行 Apache还是不如Unix稳定,因此我们可以让Apache在每天凌晨访问人数少时自动重启一次,以回收资源。用Windows自带的计划任务就可以简单的实现。 这样,我们就使Apache在Windows平台下像Unix一样长期稳定的提供服务了。
MySQL
不优化真是过不下去啊,一直优化来优化去,竟然优化出一丝丝的快感和喜悦,这是怎么肥事?
常见的优化方式及排序如下:
硬件优化-> 系统优化 -> mysql配置优化 -> SCHEMA优化 -> sql优化 -> 其他解决方案
以下主要研究的是配置优化,一般来说提高性能够了,尤其是没有程序基础的娃,何况一个博客的数量级这样可以应付大部分的问题了。
先说结论,打开MySQL文件夹下的my.ini的配置文件,
(wamp左键点击右下角的图标,鼠标放在MySQL上就能看见)
加入如下代码:
wait_timeout=1800
back_log=200
max_user_connections=800
query_cache_size =128M
read_buffer_size=4M
myisam_sort_buffer_size = 64M
以上可以搜索看看文件里有没有,如果有改一下数值,没有加上。重启。完成。
上面给出的配置是一般的配置。大部分的情况都是够用的。
如果配合定时重启,可以解决大部分的优化问题。详见:wamp & windows定时重启
数据库属于IO密集应用,大部分的运行瓶颈在IO上,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个 IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是IO,尽可能将磁盘IO转化为内存IO。iowait过高,需要加内存,减小数据读取量。
如果CPU很高,或者查询时间很长,90%索引不当
如果系统发生swap,必定是内存分配不当
所以优化,总是会围绕着提高对内存的使用率+减少IO,比如内存缓存+索引。
wait_timeout, 设置超时时间,超过这个时间会被强行关闭。默认八小时,单位为秒。
可通过 show variables like ‘wait_timeout’查看结果值
back_log, MySql的连接数据达到max_connections时,新来的数据会扔堆栈里,堆栈的大小就是这个值
max_user_connections,指每个数据库用户的最大连接,默认为0,即不受限制。
以下是缓存方面的设置:
query_cache_size, 缓存MySQL中的ResultSet,只针对select语句,可以极大的提高性能。
read_buffer_size, 读入缓冲区大小
myisam_sort_buffer_size, 默认存储类型为MyISAM,表发生变化时重新排序所需的缓冲。
参考文章:
https://www.cnblogs.com/angryprogrammer/p/6667741.html
https://blog.csdn.net/mzy755423868/article/details/80472237
https://www.cnblogs.com/chenpingzhao/p/4850942.html