对于我的大学项目,我正在使用python构建一个流量生成工具。我在Vmware上开发了自己的linux服务器和客户端。我正在使用urllib2在python中生成流量。我在这里遇到的问题是当我在客户端机器上运行我的脚本(不断使用多处理向linux服务器发送请求)时,它可以在最初的几分钟内正常工作,大约有2000个请求,但之后显示“连接重置为同行“错误和我的脚本比崩溃。可能是什么问题呢?我尝试过this,但没有帮助。
如何防止此超时错误并连续数小时运行我的脚本?
'''
Traffic Generator Script:
Here I have used IP Aliasing to create multiple clients on single vm machine. same I have done on server side to create multiple servers. I have around 50 clients and 10 servers
'''
import multiprocessing
import urllib2
import random
import myurllist #list of all destination urls for all 10 servers
import time
import socbindtry #script that binds various virtual/aliased client ips to the script
response_time=[]
error_count=multiprocessing.Value('i',0)
def send_request3(): #function to send requests from alias client ip 1
opener=urllib2.build_opener(socbindtry.BindableHTTPHandler3)#bind to alias client ip1
try:
tstart=time.time()
for i in range(myurllist.url):
x=random.choice(myurllist.url[i])
opener.open(x).read()
print "file downloaded:",x
response_time.append(time.time()-tstart)
except urllib2.URLError, e:
error_count.value=error_count.value+1
def send_request4(): #function to send requests from alias client ip 2
opener=urllib2.build_opener(socbindtry.BindableHTTPHandler4)#bind to alias client ip2
try:
tstart=time.time()
for i in range(myurllist.url):
x=random.choice(myurllist.url[i])
opener.open(x).read()
print "file downloaded:",x
response_time.append(time.time()-tstart)
except urllib2.URLError, e:
error_count.value=error_count.value+1
#50 such functions are defined here for 50 clients
process=[]
def func():
global process
process.append(multiprocessing.Process(target=send_request3))
process.append(multiprocessing.Process(target=send_request4))
process.append(multiprocessing.Process(target=send_request5))
process.append(multiprocessing.Process(target=send_request6))
#append 50 functions here
for i in range(len(process)):
process[i].start()
for i in range(len(process)):
process[i].join()
print"All work Done..!!"
return
start=float(time.time())
func()
end=float(time.time())-start
print end
答案 0 :(得分:0)
如果没有更多信息,很难知道具体发生了什么。首先关闭 - 使用netstat获取基线(在脚本执行之前):
$ netstat -nap > /tmp/pre-stats
然后在出现错误时运行脚本并捕获统计信息:
$ netstats -nap > /tmp/post-stats
完成运行后,检查两者可能会给你一些想法。因此,例如,在CLOSE_WAIT / TIME_WAIT(http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux.html)中等待太多进程的服务器端可能正在运行。这可以很容易地防止新的套接字打开,从而抛出“由同行重置连接”。
你肯定有某种资源问题 - 你需要做更多的工作来挖掘瓶颈所在的信息。
取决于它是什么 - 可能是您的客户端没有正确关闭TCP连接,或者服务器持续连接太长时间 - 可能有多个事情。 IT也可能因为某些原因而无法跟上虚拟机之间的流量。