没有ssh界面, 网站在本地运行很快
15 个解决方案
#1
你的页面是静态?伪静态 动态?
如果是静态的,请到如武器论坛区请教
如果是伪静态或动态,那就检查一下有没有很吃资源的代码,或是多次的数据库查询。
一个笨方法就是,先把代码最简, 运行,看看慢不慢,然后一步一步加代码,一步一步看情况
如果是静态的,请到如武器论坛区请教
如果是伪静态或动态,那就检查一下有没有很吃资源的代码,或是多次的数据库查询。
一个笨方法就是,先把代码最简, 运行,看看慢不慢,然后一步一步加代码,一步一步看情况
#2
数据量大了,那估计得出数据库下手!做数据库优化!(结构,索引,查询优化)
#3
把不常更新的模块写入文件,每次从文件中读取,后台更新或者每次判断上次更新时间
#4
建索引了, 问题是怎么快速找到问题所在,代码量很大
#5
动态的 php
#6
看看mysql的慢查询日志,或许有帮助
#7
静态网站 YSLOW
动态 就 优化缓存
动态 就 优化缓存
#8
这个问题的范围很大。从服务器负载,到后端后端优化,前端优化。很多方面,像你说的,首先要确定问题所在。
df -h先看下磁盘使用情况,是否被占满。不知你用的什么web server,apache还是nginx还是其它。先用top检查服务器内存,cpu的使用率,如果是多核cpu请按1,观察每个核的状态。检查http连接数和php进程数量,
ps- ef|grep -E "httpd|nginx"。检查配置文件的timeout时间,最大连接数等。看看是否超越你服务器负担,如果是设置问题,加大web server的连接数等,有针对性的优化他们。
如果mysql的cpu占用率过高,show processlist或打开慢查日志,检查是什么sql导致,explain协助优化sql。看看你建立的索引是否都被成功使用到了。对于mysql的问题,我写过一个监控脚本。能够帮忙确定问题。分享给你 。
dbMonitor.bash
[code]
#! /bin/bash
#发送人
mailfrom='xxx@xxx.cn'
#接收人
mailto='xxx-monitor@xxx.cn'
#引入写log文件的函数库
. ./lib/writelog.bash
#cpu核心数量
cpucount=16
#cpu占用率阀值,根据核心数量来制定,我的cpu是16核,阀值定为500,也就是当cpu总占用率超过30%进行报警。
threshold=500
dbwithcpu=$(top -U mysql -b -n 1 | grep 'mysqld' | awk '{printf "%d",$9}')
test -f message.txt && rm -f message.txt
#根据cpu核心数量,取得cpu平均占用率。
avgwithcpu=$(echo "scale=0;$dbwithcpu/$cpucount"|bc);
infos="CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')\n"
infos=$infos"current sql list:\n"
infos=$infos"--------------------------------\n\n"
echo -e $infos > message.txt
#写入log文件,这个你也可以不要。
log_writer 'mysqld' "CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')"
if [ $dbwithcpu -ge $threshold ]; then
/usr/local/webserver/mysql/bin/mysql -h127.0.0.1 -uroot -pmypassword -e"show full processlist;" | while read line
do
awk 'BEGIN{FS="\t"};{gsub(/\\t|\\n/,"",$8);print $8"\t(host:"$3" command:"$5" time:"$6" state:"$7")\n"}' >> message.txt
done
mail -v -s "mysqld master monitor" "${mailto}" < message.txt -- -f "${mailfrom}"
[/code]
使用crontab,每5分钟跑一次。
*/5 * * * * /home/xxx/bin/dbMonitor.bash > /dev/null
这个报警脚本,会每5分钟去top取一下mysql的cpu占用率,发现超过你设置的阀值后,就会发送邮件提醒你,并且把当时正在执行的sql打印出来。帮助你日后进行分析。
df -h先看下磁盘使用情况,是否被占满。不知你用的什么web server,apache还是nginx还是其它。先用top检查服务器内存,cpu的使用率,如果是多核cpu请按1,观察每个核的状态。检查http连接数和php进程数量,
ps- ef|grep -E "httpd|nginx"。检查配置文件的timeout时间,最大连接数等。看看是否超越你服务器负担,如果是设置问题,加大web server的连接数等,有针对性的优化他们。
如果mysql的cpu占用率过高,show processlist或打开慢查日志,检查是什么sql导致,explain协助优化sql。看看你建立的索引是否都被成功使用到了。对于mysql的问题,我写过一个监控脚本。能够帮忙确定问题。分享给你 。
dbMonitor.bash
[code]
#! /bin/bash
#发送人
mailfrom='xxx@xxx.cn'
#接收人
mailto='xxx-monitor@xxx.cn'
#引入写log文件的函数库
. ./lib/writelog.bash
#cpu核心数量
cpucount=16
#cpu占用率阀值,根据核心数量来制定,我的cpu是16核,阀值定为500,也就是当cpu总占用率超过30%进行报警。
threshold=500
dbwithcpu=$(top -U mysql -b -n 1 | grep 'mysqld' | awk '{printf "%d",$9}')
test -f message.txt && rm -f message.txt
#根据cpu核心数量,取得cpu平均占用率。
avgwithcpu=$(echo "scale=0;$dbwithcpu/$cpucount"|bc);
infos="CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')\n"
infos=$infos"current sql list:\n"
infos=$infos"--------------------------------\n\n"
echo -e $infos > message.txt
#写入log文件,这个你也可以不要。
log_writer 'mysqld' "CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')"
if [ $dbwithcpu -ge $threshold ]; then
/usr/local/webserver/mysql/bin/mysql -h127.0.0.1 -uroot -pmypassword -e"show full processlist;" | while read line
do
awk 'BEGIN{FS="\t"};{gsub(/\\t|\\n/,"",$8);print $8"\t(host:"$3" command:"$5" time:"$6" state:"$7")\n"}' >> message.txt
done
mail -v -s "mysqld master monitor" "${mailto}" < message.txt -- -f "${mailfrom}"
[/code]
使用crontab,每5分钟跑一次。
*/5 * * * * /home/xxx/bin/dbMonitor.bash > /dev/null
这个报警脚本,会每5分钟去top取一下mysql的cpu占用率,发现超过你设置的阀值后,就会发送邮件提醒你,并且把当时正在执行的sql打印出来。帮助你日后进行分析。
#9
dbMonitor.bash
#! /bin/bash
#发送人
mailfrom='xxx@xxx.cn'
#接收人
mailto='xxx-monitor@xxx.cn'
#引入写log文件的函数库
. ./lib/writelog.bash
#cpu核心数量
cpucount=16
#cpu占用率阀值,根据核心数量来制定,我的cpu是16核,阀值定为500,也就是当cpu总占用率超过30%进行报警。
threshold=500
dbwithcpu=$(top -U mysql -b -n 1 | grep 'mysqld' | awk '{printf "%d",$9}')
test -f message.txt && rm -f message.txt
#根据cpu核心数量,取得cpu平均占用率。
avgwithcpu=$(echo "scale=0;$dbwithcpu/$cpucount"|bc);
infos="CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')\n"
infos=$infos"current sql list:\n"
infos=$infos"--------------------------------\n\n"
echo -e $infos > message.txt
#写入log文件,这个你也可以不要。
log_writer 'mysqld' "CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')"
if [ $dbwithcpu -ge $threshold ]; then
/usr/local/webserver/mysql/bin/mysql -h127.0.0.1 -uroot -pmypassword -e"show full processlist;" | while read line
do
awk 'BEGIN{FS="\t"};{gsub(/\\t|\\n/,"",$8);print $8"\t(host:"$3" command:"$5" time:"$6" state:"$7")\n"}' >> message.txt
done
mail -v -s "mysqld master monitor" "${mailto}" < message.txt -- -f "${mailfrom}"
#! /bin/bash
#发送人
mailfrom='xxx@xxx.cn'
#接收人
mailto='xxx-monitor@xxx.cn'
#引入写log文件的函数库
. ./lib/writelog.bash
#cpu核心数量
cpucount=16
#cpu占用率阀值,根据核心数量来制定,我的cpu是16核,阀值定为500,也就是当cpu总占用率超过30%进行报警。
threshold=500
dbwithcpu=$(top -U mysql -b -n 1 | grep 'mysqld' | awk '{printf "%d",$9}')
test -f message.txt && rm -f message.txt
#根据cpu核心数量,取得cpu平均占用率。
avgwithcpu=$(echo "scale=0;$dbwithcpu/$cpucount"|bc);
infos="CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')\n"
infos=$infos"current sql list:\n"
infos=$infos"--------------------------------\n\n"
echo -e $infos > message.txt
#写入log文件,这个你也可以不要。
log_writer 'mysqld' "CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')"
if [ $dbwithcpu -ge $threshold ]; then
/usr/local/webserver/mysql/bin/mysql -h127.0.0.1 -uroot -pmypassword -e"show full processlist;" | while read line
do
awk 'BEGIN{FS="\t"};{gsub(/\\t|\\n/,"",$8);print $8"\t(host:"$3" command:"$5" time:"$6" state:"$7")\n"}' >> message.txt
done
mail -v -s "mysqld master monitor" "${mailto}" < message.txt -- -f "${mailfrom}"
#10
后端排查问题大概就是这么个方向。
前端优化也很重要也很复杂,但排查问题比后端较较但一些。你可以借助一些工具,比如firebug和chrome里面的分析工具。查看timeline。看看是哪些图片过大,或是js文件加载时间过长导致。firebug那个uslow的插件也不错。
优化方法我就不说了,这个要写的话可以写几本书了。
前端优化也很重要也很复杂,但排查问题比后端较较但一些。你可以借助一些工具,比如firebug和chrome里面的分析工具。查看timeline。看看是哪些图片过大,或是js文件加载时间过长导致。firebug那个uslow的插件也不错。
优化方法我就不说了,这个要写的话可以写几本书了。
#11
关注一下~~
#12
学习之
#13
多半都出现在数据库的查询语句上!建议对数据库端做下监控!看看是什么语句比较耗资源,然后针对性的优化sql
#14
听楼主的意思估计是服务器方面是主要原因
#15
多谢各位,尤其是ShadowSniper的脚本
我亲自跑去把服务器重装了
发现装的是 windows2003
我换成linux系统后, 网站变得飞快
我亲自跑去把服务器重装了
发现装的是 windows2003
我换成linux系统后, 网站变得飞快
#1
你的页面是静态?伪静态 动态?
如果是静态的,请到如武器论坛区请教
如果是伪静态或动态,那就检查一下有没有很吃资源的代码,或是多次的数据库查询。
一个笨方法就是,先把代码最简, 运行,看看慢不慢,然后一步一步加代码,一步一步看情况
如果是静态的,请到如武器论坛区请教
如果是伪静态或动态,那就检查一下有没有很吃资源的代码,或是多次的数据库查询。
一个笨方法就是,先把代码最简, 运行,看看慢不慢,然后一步一步加代码,一步一步看情况
#2
数据量大了,那估计得出数据库下手!做数据库优化!(结构,索引,查询优化)
#3
把不常更新的模块写入文件,每次从文件中读取,后台更新或者每次判断上次更新时间
#4
建索引了, 问题是怎么快速找到问题所在,代码量很大
#5
动态的 php
#6
看看mysql的慢查询日志,或许有帮助
#7
静态网站 YSLOW
动态 就 优化缓存
动态 就 优化缓存
#8
这个问题的范围很大。从服务器负载,到后端后端优化,前端优化。很多方面,像你说的,首先要确定问题所在。
df -h先看下磁盘使用情况,是否被占满。不知你用的什么web server,apache还是nginx还是其它。先用top检查服务器内存,cpu的使用率,如果是多核cpu请按1,观察每个核的状态。检查http连接数和php进程数量,
ps- ef|grep -E "httpd|nginx"。检查配置文件的timeout时间,最大连接数等。看看是否超越你服务器负担,如果是设置问题,加大web server的连接数等,有针对性的优化他们。
如果mysql的cpu占用率过高,show processlist或打开慢查日志,检查是什么sql导致,explain协助优化sql。看看你建立的索引是否都被成功使用到了。对于mysql的问题,我写过一个监控脚本。能够帮忙确定问题。分享给你 。
dbMonitor.bash
[code]
#! /bin/bash
#发送人
mailfrom='xxx@xxx.cn'
#接收人
mailto='xxx-monitor@xxx.cn'
#引入写log文件的函数库
. ./lib/writelog.bash
#cpu核心数量
cpucount=16
#cpu占用率阀值,根据核心数量来制定,我的cpu是16核,阀值定为500,也就是当cpu总占用率超过30%进行报警。
threshold=500
dbwithcpu=$(top -U mysql -b -n 1 | grep 'mysqld' | awk '{printf "%d",$9}')
test -f message.txt && rm -f message.txt
#根据cpu核心数量,取得cpu平均占用率。
avgwithcpu=$(echo "scale=0;$dbwithcpu/$cpucount"|bc);
infos="CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')\n"
infos=$infos"current sql list:\n"
infos=$infos"--------------------------------\n\n"
echo -e $infos > message.txt
#写入log文件,这个你也可以不要。
log_writer 'mysqld' "CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')"
if [ $dbwithcpu -ge $threshold ]; then
/usr/local/webserver/mysql/bin/mysql -h127.0.0.1 -uroot -pmypassword -e"show full processlist;" | while read line
do
awk 'BEGIN{FS="\t"};{gsub(/\\t|\\n/,"",$8);print $8"\t(host:"$3" command:"$5" time:"$6" state:"$7")\n"}' >> message.txt
done
mail -v -s "mysqld master monitor" "${mailto}" < message.txt -- -f "${mailfrom}"
[/code]
使用crontab,每5分钟跑一次。
*/5 * * * * /home/xxx/bin/dbMonitor.bash > /dev/null
这个报警脚本,会每5分钟去top取一下mysql的cpu占用率,发现超过你设置的阀值后,就会发送邮件提醒你,并且把当时正在执行的sql打印出来。帮助你日后进行分析。
df -h先看下磁盘使用情况,是否被占满。不知你用的什么web server,apache还是nginx还是其它。先用top检查服务器内存,cpu的使用率,如果是多核cpu请按1,观察每个核的状态。检查http连接数和php进程数量,
ps- ef|grep -E "httpd|nginx"。检查配置文件的timeout时间,最大连接数等。看看是否超越你服务器负担,如果是设置问题,加大web server的连接数等,有针对性的优化他们。
如果mysql的cpu占用率过高,show processlist或打开慢查日志,检查是什么sql导致,explain协助优化sql。看看你建立的索引是否都被成功使用到了。对于mysql的问题,我写过一个监控脚本。能够帮忙确定问题。分享给你 。
dbMonitor.bash
[code]
#! /bin/bash
#发送人
mailfrom='xxx@xxx.cn'
#接收人
mailto='xxx-monitor@xxx.cn'
#引入写log文件的函数库
. ./lib/writelog.bash
#cpu核心数量
cpucount=16
#cpu占用率阀值,根据核心数量来制定,我的cpu是16核,阀值定为500,也就是当cpu总占用率超过30%进行报警。
threshold=500
dbwithcpu=$(top -U mysql -b -n 1 | grep 'mysqld' | awk '{printf "%d",$9}')
test -f message.txt && rm -f message.txt
#根据cpu核心数量,取得cpu平均占用率。
avgwithcpu=$(echo "scale=0;$dbwithcpu/$cpucount"|bc);
infos="CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')\n"
infos=$infos"current sql list:\n"
infos=$infos"--------------------------------\n\n"
echo -e $infos > message.txt
#写入log文件,这个你也可以不要。
log_writer 'mysqld' "CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')"
if [ $dbwithcpu -ge $threshold ]; then
/usr/local/webserver/mysql/bin/mysql -h127.0.0.1 -uroot -pmypassword -e"show full processlist;" | while read line
do
awk 'BEGIN{FS="\t"};{gsub(/\\t|\\n/,"",$8);print $8"\t(host:"$3" command:"$5" time:"$6" state:"$7")\n"}' >> message.txt
done
mail -v -s "mysqld master monitor" "${mailto}" < message.txt -- -f "${mailfrom}"
[/code]
使用crontab,每5分钟跑一次。
*/5 * * * * /home/xxx/bin/dbMonitor.bash > /dev/null
这个报警脚本,会每5分钟去top取一下mysql的cpu占用率,发现超过你设置的阀值后,就会发送邮件提醒你,并且把当时正在执行的sql打印出来。帮助你日后进行分析。
#9
dbMonitor.bash
#! /bin/bash
#发送人
mailfrom='xxx@xxx.cn'
#接收人
mailto='xxx-monitor@xxx.cn'
#引入写log文件的函数库
. ./lib/writelog.bash
#cpu核心数量
cpucount=16
#cpu占用率阀值,根据核心数量来制定,我的cpu是16核,阀值定为500,也就是当cpu总占用率超过30%进行报警。
threshold=500
dbwithcpu=$(top -U mysql -b -n 1 | grep 'mysqld' | awk '{printf "%d",$9}')
test -f message.txt && rm -f message.txt
#根据cpu核心数量,取得cpu平均占用率。
avgwithcpu=$(echo "scale=0;$dbwithcpu/$cpucount"|bc);
infos="CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')\n"
infos=$infos"current sql list:\n"
infos=$infos"--------------------------------\n\n"
echo -e $infos > message.txt
#写入log文件,这个你也可以不要。
log_writer 'mysqld' "CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')"
if [ $dbwithcpu -ge $threshold ]; then
/usr/local/webserver/mysql/bin/mysql -h127.0.0.1 -uroot -pmypassword -e"show full processlist;" | while read line
do
awk 'BEGIN{FS="\t"};{gsub(/\\t|\\n/,"",$8);print $8"\t(host:"$3" command:"$5" time:"$6" state:"$7")\n"}' >> message.txt
done
mail -v -s "mysqld master monitor" "${mailto}" < message.txt -- -f "${mailfrom}"
#! /bin/bash
#发送人
mailfrom='xxx@xxx.cn'
#接收人
mailto='xxx-monitor@xxx.cn'
#引入写log文件的函数库
. ./lib/writelog.bash
#cpu核心数量
cpucount=16
#cpu占用率阀值,根据核心数量来制定,我的cpu是16核,阀值定为500,也就是当cpu总占用率超过30%进行报警。
threshold=500
dbwithcpu=$(top -U mysql -b -n 1 | grep 'mysqld' | awk '{printf "%d",$9}')
test -f message.txt && rm -f message.txt
#根据cpu核心数量,取得cpu平均占用率。
avgwithcpu=$(echo "scale=0;$dbwithcpu/$cpucount"|bc);
infos="CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')\n"
infos=$infos"current sql list:\n"
infos=$infos"--------------------------------\n\n"
echo -e $infos > message.txt
#写入log文件,这个你也可以不要。
log_writer 'mysqld' "CPU core quantity:${cpucount}. mysqld current average occupancy rate:${avgwithcpu}% and current occupancy rate for total: ${dbwithcpu}% at $(date +'%Y-%m-%d %H:%M:%S')"
if [ $dbwithcpu -ge $threshold ]; then
/usr/local/webserver/mysql/bin/mysql -h127.0.0.1 -uroot -pmypassword -e"show full processlist;" | while read line
do
awk 'BEGIN{FS="\t"};{gsub(/\\t|\\n/,"",$8);print $8"\t(host:"$3" command:"$5" time:"$6" state:"$7")\n"}' >> message.txt
done
mail -v -s "mysqld master monitor" "${mailto}" < message.txt -- -f "${mailfrom}"
#10
后端排查问题大概就是这么个方向。
前端优化也很重要也很复杂,但排查问题比后端较较但一些。你可以借助一些工具,比如firebug和chrome里面的分析工具。查看timeline。看看是哪些图片过大,或是js文件加载时间过长导致。firebug那个uslow的插件也不错。
优化方法我就不说了,这个要写的话可以写几本书了。
前端优化也很重要也很复杂,但排查问题比后端较较但一些。你可以借助一些工具,比如firebug和chrome里面的分析工具。查看timeline。看看是哪些图片过大,或是js文件加载时间过长导致。firebug那个uslow的插件也不错。
优化方法我就不说了,这个要写的话可以写几本书了。
#11
关注一下~~
#12
学习之
#13
多半都出现在数据库的查询语句上!建议对数据库端做下监控!看看是什么语句比较耗资源,然后针对性的优化sql
#14
听楼主的意思估计是服务器方面是主要原因
#15
多谢各位,尤其是ShadowSniper的脚本
我亲自跑去把服务器重装了
发现装的是 windows2003
我换成linux系统后, 网站变得飞快
我亲自跑去把服务器重装了
发现装的是 windows2003
我换成linux系统后, 网站变得飞快