高分求大神解决网站速度慢问题

时间:2022-07-16 03:07:08
公司网站进行改版,所有页面都完成好,本地测试完成,架设到一台空服务器上测试也是正常,但是这台空服务器是作为数据库服务器,所以将网站转移到代码服务器,由于代码服务器上运行着老版网站,数据库和代码共存于一台服务器,使用的是2.0框架,数据库设置最大内存占用18G,将代码转移过来以后进行测试,结果发现网站速度慢,将数据库内存降低到12G,依旧慢,打开静态页,去掉js,速度上来,但是其他页面依旧慢,特别有几个页面是通过lucene.net查询的,速度更加慢,但是很奇怪的是,lucene.net查询,有些关键词只需要0.4-0.6秒,但是有些关键词却要40秒,甚至更长时间,通过数据库服务器的数据库中的活动监视器查看sql语句,发现都在400毫秒以内,通过代码服务器的性能查看IO的响应时间为0.03-0.19之间,IO的吞吐率很大,硬盘转速是15000转的,在此求各位大神能够帮帮小弟,小弟不胜感激!多给点意见!最后说明一下,老网站速度是不慢的!

19 个解决方案

#1


第一,可能是你写代码的原因,对sql 的优化不够。
第二,你试着加索引看看,对于一些复杂查询,而且又经常用到的字段条件,加上组合索引看看。
我觉得最主要的还是这两个原因,服务器这样的配置一般都是符合要求的,所以可能性很小。

#2


引用 1 楼 qingfeng_wu 的回复:
第一,可能是你写代码的原因,对sql 的优化不够。
第二,你试着加索引看看,对于一些复杂查询,而且又经常用到的字段条件,加上组合索引看看。
我觉得最主要的还是这两个原因,服务器这样的配置一般都是符合要求的,所以可能性很小。

数据库我检查过了,而且sql2008不是有一个活动监视器可以查看最近最耗资源的查询吗?我看到毫秒数都是在400毫秒以内的,还有我原先是将项目架设到跟数据库同一台服务器上,网站打开速度正常!架设到代码服务器上,一些js或者图片通过谷歌浏览器的F12查看到需要4秒左右的下载,通过lucene.net索引查询数据,所需时间是将项目架设数据库的几十倍,不过在代码服务器上,lucene.net搜索时间有时又是正常的,0.4秒左右,有时却是30-50秒,代码服务器的配置比数据库服务器好!

#3


很难说。

你可以跟踪一下某些关键操作下,此时通过网卡传输的业务信息用了多少带宽。

#4


引用 3 楼 sp1234 的回复:
很难说。

你可以跟踪一下某些关键操作下,此时通过网卡传输的业务信息用了多少带宽。

因为服务器上是没有装VS2010的,我就对执行lucene.net的这个方法进行时间计算,得出的时间有些要30-50秒,有些却只要0.5秒,还有数据库远程连接,我是用外网ip来访问的,不知道这是否会影响整个网站的性能!

#5


外网ip并没有什么值得担心的。

我不是说你要得出“时间”,我是说你要得出“带宽占用”。而且你不是基于某个服务,而是要知道具体是哪一个程序方法最消耗带宽。

#6


这就好比如你说“我没钱了”,我希望你要知道你买哪一样东西花了钱。

#7


引用 6 楼 sp1234 的回复:
这就好比如你说“我没钱了”,我希望你要知道你买哪一样东西花了钱。
请问下,如何查看每个程序占用的带宽呢?

#8


my god看cpu输出

#9


实在不行的话可以考虑换数据库。我看你的情况,好像公司用的是sql,试试mysql或者Oracle。我们公司用的Oracle。

#10


引用 2 楼 zoulei2546 的回复:
Quote: 引用 1 楼 qingfeng_wu 的回复:

第一,可能是你写代码的原因,对sql 的优化不够。
第二,你试着加索引看看,对于一些复杂查询,而且又经常用到的字段条件,加上组合索引看看。
我觉得最主要的还是这两个原因,服务器这样的配置一般都是符合要求的,所以可能性很小。

数据库我检查过了,而且sql2008不是有一个活动监视器可以查看最近最耗资源的查询吗?我看到毫秒数都是在400毫秒以内的,还有我原先是将项目架设到跟数据库同一台服务器上,网站打开速度正常!架设到代码服务器上,一些js或者图片通过谷歌浏览器的F12查看到需要4秒左右的下载,通过lucene.net索引查询数据,所需时间是将项目架设数据库的几十倍,不过在代码服务器上,lucene.net搜索时间有时又是正常的,0.4秒左右,有时却是30-50秒,代码服务器的配置比数据库服务器好!


如果你确定你写的代码没有问题,而且加了索引。那你不妨可以联系下服务器的商家,如果是自己的服务器,那也要找网管看下具体原因。

#11


还有,你换下其他服务器试试,如果没有出现你这种情况,那就说明是服务器的原因了。看你说的,我也觉得不是代码的原因。

#12


引用 11 楼 qingfeng_wu 的回复:
还有,你换下其他服务器试试,如果没有出现你这种情况,那就说明是服务器的原因了。看你说的,我也觉得不是代码的原因。
主要是我们新版要换老版的,还有一些要挂在老版上,而老版都在代码服务器,域名解析也是到代码服务器的,如果这么换,老板联系服务器托管商,那边说麻烦,所以得必须把所有都确定了,才能换,不然换过去,高流量一来,网站慢了,又得马上回到代码服务器的,域名解析时间不好控制,会使老网站一直打不开,又不敢试,就纠结在这里啊!

#13


引用 9 楼 hiv002 的回复:
实在不行的话可以考虑换数据库。我看你的情况,好像公司用的是sql,试试mysql或者Oracle。我们公司用的Oracle。
应该不是数据库的原因,从任务管理器里查看,发现带宽和cpu都不高,只是内存我们设置了数据库最大18G,一般内存都是达到20个G,总内存是24个G

#14


一般的web应用,400ms的单次SQL查询本就很夸张了。如果查询组合很多而且没有专用缓存系统的话慢就是正常事了。有专用缓存系统的话,SQLServer尽量少给内存,否则就是浪费内存。另外看看索引是否可用,或者考虑一下固态硬盘。
记得lucene有种支持缓存的模式,单关键字查询应该直接与结果数据量相关,0.4s结果应该在1000w级别以上了。
个人感觉,硬盘写操作可能有很大的问题。服务器上是否装有类似于360之类的流氓软件?此类流氓软件将可能造成硬盘写操作10倍速的降低。

#15


引用 7 楼 zoulei2546 的回复:
Quote: 引用 6 楼 sp1234 的回复:

这就好比如你说“我没钱了”,我希望你要知道你买哪一样东西花了钱。
请问下,如何查看每个程序占用的带宽呢?


查看程序占用带宽?我是说“重要的几个操作”,不是指什么整个程序平均,也不是指什么数据库平均,之类的。

你需要在程序中写日志,然后比如说打开日志文件看到:
19.21.23.345秒  发送消息abcd,共23458字节
19.21.23.359秒  发送消息efgh,共982字节
19.21.23.375秒  接收消息abcd,共8373字节
19.21.23.912秒  接收消息mmmm,共60字节
19.21.24.300秒  发送消息kkkk,共1482374234字节
19.21.24.311秒  发送消息kkkk,共1482374234字节

如果你能进行的分析只是“平均xxxx”,你无法进入细节,那么这种分析测试就没有意义了。你只能处理平均值问题,而不能处理“个别时间要消耗40秒”这类技术问题。

#16


引用 12 楼 zoulei2546 的回复:
主要是我们新版要换老版的,还有一些要挂在老版上,而老版都在代码服务器,域名解析也是到代码服务器的,如果这么换,老板联系服务器托管商,那边说麻烦,所以得必须把所有都确定了,才能换,不然换过去,高流量一来,网站慢了,又得马上回到代码服务器的,域名解析时间不好控制,会使老网站一直打不开,又不敢试,就纠结在这里啊!


什么服务器商?改变域名解释不是购买域名的人自己去设置吗?你们是不是公司没有肯动手的人、全都是指挥的人啊?如果自己动手,这个地方就不会因为别人一个随口“减少责任”的话而忧心忡忡,你们自己应该知道这是是怎么回事。凡是在小事上“一直不敢试”的,往往说明:公司的技术管理上出现了一些状况,可能有研发技术的人都走了,剩下的人主要是服务人员充当技术人员。

暂时从老版移到新版,也不需要去改变什么域名解析,在IIS(或者其它web服务器)上配置一下相应网站或虚拟目录的重定向地址就行了。

#17


愿楼主早点解决,学习经验

#18


引用 16 楼 sp1234 的回复:
Quote: 引用 12 楼 zoulei2546 的回复:

主要是我们新版要换老版的,还有一些要挂在老版上,而老版都在代码服务器,域名解析也是到代码服务器的,如果这么换,老板联系服务器托管商,那边说麻烦,所以得必须把所有都确定了,才能换,不然换过去,高流量一来,网站慢了,又得马上回到代码服务器的,域名解析时间不好控制,会使老网站一直打不开,又不敢试,就纠结在这里啊!


什么服务器商?改变域名解释不是购买域名的人自己去设置吗?你们是不是公司没有肯动手的人、全都是指挥的人啊?如果自己动手,这个地方就不会因为别人一个随口“减少责任”的话而忧心忡忡,你们自己应该知道这是是怎么回事。凡是在小事上“一直不敢试”的,往往说明:公司的技术管理上出现了一些状况,可能有研发技术的人都走了,剩下的人主要是服务人员充当技术人员。

暂时从老版移到新版,也不需要去改变什么域名解析,在IIS(或者其它web服务器)上配置一下相应网站或虚拟目录的重定向地址就行了。
谢谢你的提示,我周一上班的时候按照您的想法去试试,可能我想的太复杂了,也希望您还能有好的建议

#19


引用 14 楼 sbwwkmyd 的回复:
一般的web应用,400ms的单次SQL查询本就很夸张了。如果查询组合很多而且没有专用缓存系统的话慢就是正常事了。有专用缓存系统的话,SQLServer尽量少给内存,否则就是浪费内存。另外看看索引是否可用,或者考虑一下固态硬盘。
记得lucene有种支持缓存的模式,单关键字查询应该直接与结果数据量相关,0.4s结果应该在1000w级别以上了。
个人感觉,硬盘写操作可能有很大的问题。服务器上是否装有类似于360之类的流氓软件?此类流氓软件将可能造成硬盘写操作10倍速的降低。
我是读的操作,从系统自带的性能检测那边查看硬盘的响应时间都是0.019到0.2左右,我用的是盘古分词后去查询,40秒或者0.4秒都是从进Lucene查询2000条数据然后遍历返回一个数组,这个时间段的时间,索引文件记录的是600w+的数据,使用的是磁盘索引,数据库400MS的查询,主要是根据id列,20个id去一张600w数据的数据表里查询,速度400ms,如果慢该如何解决呢,也就操作这张表的时间久,其他的一般在50ms以下,一部分在50-100ms,很少有上100Ms的,我的查询语句是select id,title,content,price,city...(10几个字段) from table where id in(20个id的id列),能有什么能够改进的吗?希望您能够给我提供帮助!

#1


第一,可能是你写代码的原因,对sql 的优化不够。
第二,你试着加索引看看,对于一些复杂查询,而且又经常用到的字段条件,加上组合索引看看。
我觉得最主要的还是这两个原因,服务器这样的配置一般都是符合要求的,所以可能性很小。

#2


引用 1 楼 qingfeng_wu 的回复:
第一,可能是你写代码的原因,对sql 的优化不够。
第二,你试着加索引看看,对于一些复杂查询,而且又经常用到的字段条件,加上组合索引看看。
我觉得最主要的还是这两个原因,服务器这样的配置一般都是符合要求的,所以可能性很小。

数据库我检查过了,而且sql2008不是有一个活动监视器可以查看最近最耗资源的查询吗?我看到毫秒数都是在400毫秒以内的,还有我原先是将项目架设到跟数据库同一台服务器上,网站打开速度正常!架设到代码服务器上,一些js或者图片通过谷歌浏览器的F12查看到需要4秒左右的下载,通过lucene.net索引查询数据,所需时间是将项目架设数据库的几十倍,不过在代码服务器上,lucene.net搜索时间有时又是正常的,0.4秒左右,有时却是30-50秒,代码服务器的配置比数据库服务器好!

#3


很难说。

你可以跟踪一下某些关键操作下,此时通过网卡传输的业务信息用了多少带宽。

#4


引用 3 楼 sp1234 的回复:
很难说。

你可以跟踪一下某些关键操作下,此时通过网卡传输的业务信息用了多少带宽。

因为服务器上是没有装VS2010的,我就对执行lucene.net的这个方法进行时间计算,得出的时间有些要30-50秒,有些却只要0.5秒,还有数据库远程连接,我是用外网ip来访问的,不知道这是否会影响整个网站的性能!

#5


外网ip并没有什么值得担心的。

我不是说你要得出“时间”,我是说你要得出“带宽占用”。而且你不是基于某个服务,而是要知道具体是哪一个程序方法最消耗带宽。

#6


这就好比如你说“我没钱了”,我希望你要知道你买哪一样东西花了钱。

#7


引用 6 楼 sp1234 的回复:
这就好比如你说“我没钱了”,我希望你要知道你买哪一样东西花了钱。
请问下,如何查看每个程序占用的带宽呢?

#8


my god看cpu输出

#9


实在不行的话可以考虑换数据库。我看你的情况,好像公司用的是sql,试试mysql或者Oracle。我们公司用的Oracle。

#10


引用 2 楼 zoulei2546 的回复:
Quote: 引用 1 楼 qingfeng_wu 的回复:

第一,可能是你写代码的原因,对sql 的优化不够。
第二,你试着加索引看看,对于一些复杂查询,而且又经常用到的字段条件,加上组合索引看看。
我觉得最主要的还是这两个原因,服务器这样的配置一般都是符合要求的,所以可能性很小。

数据库我检查过了,而且sql2008不是有一个活动监视器可以查看最近最耗资源的查询吗?我看到毫秒数都是在400毫秒以内的,还有我原先是将项目架设到跟数据库同一台服务器上,网站打开速度正常!架设到代码服务器上,一些js或者图片通过谷歌浏览器的F12查看到需要4秒左右的下载,通过lucene.net索引查询数据,所需时间是将项目架设数据库的几十倍,不过在代码服务器上,lucene.net搜索时间有时又是正常的,0.4秒左右,有时却是30-50秒,代码服务器的配置比数据库服务器好!


如果你确定你写的代码没有问题,而且加了索引。那你不妨可以联系下服务器的商家,如果是自己的服务器,那也要找网管看下具体原因。

#11


还有,你换下其他服务器试试,如果没有出现你这种情况,那就说明是服务器的原因了。看你说的,我也觉得不是代码的原因。

#12


引用 11 楼 qingfeng_wu 的回复:
还有,你换下其他服务器试试,如果没有出现你这种情况,那就说明是服务器的原因了。看你说的,我也觉得不是代码的原因。
主要是我们新版要换老版的,还有一些要挂在老版上,而老版都在代码服务器,域名解析也是到代码服务器的,如果这么换,老板联系服务器托管商,那边说麻烦,所以得必须把所有都确定了,才能换,不然换过去,高流量一来,网站慢了,又得马上回到代码服务器的,域名解析时间不好控制,会使老网站一直打不开,又不敢试,就纠结在这里啊!

#13


引用 9 楼 hiv002 的回复:
实在不行的话可以考虑换数据库。我看你的情况,好像公司用的是sql,试试mysql或者Oracle。我们公司用的Oracle。
应该不是数据库的原因,从任务管理器里查看,发现带宽和cpu都不高,只是内存我们设置了数据库最大18G,一般内存都是达到20个G,总内存是24个G

#14


一般的web应用,400ms的单次SQL查询本就很夸张了。如果查询组合很多而且没有专用缓存系统的话慢就是正常事了。有专用缓存系统的话,SQLServer尽量少给内存,否则就是浪费内存。另外看看索引是否可用,或者考虑一下固态硬盘。
记得lucene有种支持缓存的模式,单关键字查询应该直接与结果数据量相关,0.4s结果应该在1000w级别以上了。
个人感觉,硬盘写操作可能有很大的问题。服务器上是否装有类似于360之类的流氓软件?此类流氓软件将可能造成硬盘写操作10倍速的降低。

#15


引用 7 楼 zoulei2546 的回复:
Quote: 引用 6 楼 sp1234 的回复:

这就好比如你说“我没钱了”,我希望你要知道你买哪一样东西花了钱。
请问下,如何查看每个程序占用的带宽呢?


查看程序占用带宽?我是说“重要的几个操作”,不是指什么整个程序平均,也不是指什么数据库平均,之类的。

你需要在程序中写日志,然后比如说打开日志文件看到:
19.21.23.345秒  发送消息abcd,共23458字节
19.21.23.359秒  发送消息efgh,共982字节
19.21.23.375秒  接收消息abcd,共8373字节
19.21.23.912秒  接收消息mmmm,共60字节
19.21.24.300秒  发送消息kkkk,共1482374234字节
19.21.24.311秒  发送消息kkkk,共1482374234字节

如果你能进行的分析只是“平均xxxx”,你无法进入细节,那么这种分析测试就没有意义了。你只能处理平均值问题,而不能处理“个别时间要消耗40秒”这类技术问题。

#16


引用 12 楼 zoulei2546 的回复:
主要是我们新版要换老版的,还有一些要挂在老版上,而老版都在代码服务器,域名解析也是到代码服务器的,如果这么换,老板联系服务器托管商,那边说麻烦,所以得必须把所有都确定了,才能换,不然换过去,高流量一来,网站慢了,又得马上回到代码服务器的,域名解析时间不好控制,会使老网站一直打不开,又不敢试,就纠结在这里啊!


什么服务器商?改变域名解释不是购买域名的人自己去设置吗?你们是不是公司没有肯动手的人、全都是指挥的人啊?如果自己动手,这个地方就不会因为别人一个随口“减少责任”的话而忧心忡忡,你们自己应该知道这是是怎么回事。凡是在小事上“一直不敢试”的,往往说明:公司的技术管理上出现了一些状况,可能有研发技术的人都走了,剩下的人主要是服务人员充当技术人员。

暂时从老版移到新版,也不需要去改变什么域名解析,在IIS(或者其它web服务器)上配置一下相应网站或虚拟目录的重定向地址就行了。

#17


愿楼主早点解决,学习经验

#18


引用 16 楼 sp1234 的回复:
Quote: 引用 12 楼 zoulei2546 的回复:

主要是我们新版要换老版的,还有一些要挂在老版上,而老版都在代码服务器,域名解析也是到代码服务器的,如果这么换,老板联系服务器托管商,那边说麻烦,所以得必须把所有都确定了,才能换,不然换过去,高流量一来,网站慢了,又得马上回到代码服务器的,域名解析时间不好控制,会使老网站一直打不开,又不敢试,就纠结在这里啊!


什么服务器商?改变域名解释不是购买域名的人自己去设置吗?你们是不是公司没有肯动手的人、全都是指挥的人啊?如果自己动手,这个地方就不会因为别人一个随口“减少责任”的话而忧心忡忡,你们自己应该知道这是是怎么回事。凡是在小事上“一直不敢试”的,往往说明:公司的技术管理上出现了一些状况,可能有研发技术的人都走了,剩下的人主要是服务人员充当技术人员。

暂时从老版移到新版,也不需要去改变什么域名解析,在IIS(或者其它web服务器)上配置一下相应网站或虚拟目录的重定向地址就行了。
谢谢你的提示,我周一上班的时候按照您的想法去试试,可能我想的太复杂了,也希望您还能有好的建议

#19


引用 14 楼 sbwwkmyd 的回复:
一般的web应用,400ms的单次SQL查询本就很夸张了。如果查询组合很多而且没有专用缓存系统的话慢就是正常事了。有专用缓存系统的话,SQLServer尽量少给内存,否则就是浪费内存。另外看看索引是否可用,或者考虑一下固态硬盘。
记得lucene有种支持缓存的模式,单关键字查询应该直接与结果数据量相关,0.4s结果应该在1000w级别以上了。
个人感觉,硬盘写操作可能有很大的问题。服务器上是否装有类似于360之类的流氓软件?此类流氓软件将可能造成硬盘写操作10倍速的降低。
我是读的操作,从系统自带的性能检测那边查看硬盘的响应时间都是0.019到0.2左右,我用的是盘古分词后去查询,40秒或者0.4秒都是从进Lucene查询2000条数据然后遍历返回一个数组,这个时间段的时间,索引文件记录的是600w+的数据,使用的是磁盘索引,数据库400MS的查询,主要是根据id列,20个id去一张600w数据的数据表里查询,速度400ms,如果慢该如何解决呢,也就操作这张表的时间久,其他的一般在50ms以下,一部分在50-100ms,很少有上100Ms的,我的查询语句是select id,title,content,price,city...(10几个字段) from table where id in(20个id的id列),能有什么能够改进的吗?希望您能够给我提供帮助!

#20