在stackoverflow上有一些关于网站性能监控工具和服务的讨论,然而,它们看起来相当昂贵.有没有好的开源库可以自动检查/监控网站的可用性?
我有一个依赖于非常"实时"数据的Web应用程序 - 所以如果有变化,它需要每1秒更新一次.
我想知道以下解决方案的优点和缺点是什么.
解决方案1 - 轮询很多
所以每1秒,我向服务器发送一个请求并获取一些数据.一旦我获得了数据,我会等待1秒再重复一遍.如果州改变并采取适当的行动,我会检测到客户端.
解决方案2 - 阻止很多
所以我向服务器发起一个请求,在30秒后会超时.服务器通过每秒检查一次来监视服务器上的数据.如果服务器注意到数据已更改,则会将数据发送回客户端,客户端会采取相应的操作.
脚本
实质上,数据的大小相当小,但是根据实时事件以随机间隔进行更改.问题是,Web UI将在2,000个实例的区域中运行,因此我每秒有2,000个来自UI的请求,或者我有2,000个长时间运行的请求,最多需要30秒?
非常感谢帮助和建议,特别是如果您在类似的卷下使用AJAX请求.
假设我正在编写一个应用程序,我需要从服务器实时获取通知,并且假设这些通知存储在mysql数据库中.为了让我得到它们,我必须继续轮询mysql服务器(不断重复相同的选择查询,直到我真正得到结果)但我认为这是非常无效的方式这样做,因为大多数时候选择会变为空.如果我经常这样做,它在服务器上是不合理的压力,如果我这样做,很少通知会很晚.所以我想知道是否有办法说一个mysql查询阻止,直到匹配条件的结果变得可用.
list = query ("SELECT * FROM `notifications` WHERE `unread`=1") ;
Run Code Online (Sandbox Code Playgroud)
如果没有未读通知,则不会返回空列表,而是等到实际有未读通知返回
我正在尝试编写一个每1分钟读取一次变量的函数,并返回每次的值.变量名是proc:
proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination],
stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]
Run Code Online (Sandbox Code Playgroud)
进度存储在proc变量中.我希望函数每1分钟轮询一次变量并返回值.这样做直到变量执行时为止.最好的方法是什么?
尝试使用:
def doWork():
while True:
proc = subprocess.Popen(['sshpass', '-p', password, 'rsync', '-avz', '--info=progress2', source12, destination],
stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0]stdout=subprocess.PIPE).communicate()[0]
data = sort(proc)
print data
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)
虽然没有运气!它同时打印整个进度并循环.
在我的应用程序中,我需要查看新文件的目录.流量非常大,每秒至少会有数百个新文件出现.目前我正在使用这种想法的繁忙循环:
while True:
time.sleep(0.2)
if len(os.listdir('.')) > 0:
# do stuff
Run Code Online (Sandbox Code Playgroud)
运行性能分析后,我看到很多时间都在睡眠中,我想知道是否应该改变它来使用轮询.
我正在尝试使用其中一个可用的类select来轮询我的目录,但我不确定它是否真的有效,或者我是否只是做错了.
我为我的目录获得了一个fd:
fd = os.open('.', os.O_DIRECT)
Run Code Online (Sandbox Code Playgroud)
然后我尝试了几种方法来查看目录何时更改.举个例子,我尝试过的一件事是:
poll = select.poll()
poll.register(fd, select.POLLIN)
poll.poll() # returns (fd, 1) meaning 'ready to read'
os.read(fd, 4096) # prints largely gibberish but i can see that i'm pulling the files/folders contained in the directory at least
poll.poll() # returns (fd, 1) again
os.read(fd, 4096) # empty string - no more data
Run Code Online (Sandbox Code Playgroud)
为什么poll()表现得有更多的信息需要阅读?我假设只有在目录中发生了某些变化时才会这样做.
我想在这里做什么甚至可能吗?
如果没有,还有其他更好的选择while True: look for changes吗?
我对中断有一个基本的疑问.想象一下没有任何中断的计算机,所以为了让它进行I/O,CPU必须轮询*键盘以进行按键,鼠标按键定时等.现在,如果它有中断,CPU将继续检查中断线是否定期变高(或低).那么如何通过使用中断来节省CPU周期.根据我的理解而不是现在检查设备,我们正在检查中断线.有人可以解释我错误的基本逻辑.
*这里通过轮询我并不是说CPU处于忙碌状态.引用维基百科"轮询还指的是重复检查设备是否准备就绪的情况,如果不是,则计算机返回到不同的任务"
我正试图找到一种方法来对cassandra数据库进行轮询,但我是新手,我不知道如何.
可以说我有一个像这样的"用户"表
-> users
-> user_name
-> gender
-> state
Run Code Online (Sandbox Code Playgroud)
我想不断进行轮询,所以我知道是否有新用户添加到表中.我怎样才能做到这一点?
我想在Jenkins中检查或获取有关SCM轮询失败的通知(例如,当存储库URL已更改或分支被删除时).我想到了这些:
a)Jenkins控制台脚本,它将列出这些错误的工作
b)为Jenkins配置/安装插件以某种方式通知我这个事实(电子邮件,任何东西)
c)外部脚本/可执行文件(bash,python,...),它将列出由于SCM轮询失败而在过去X小时内失败的构建
目前,根据我对这些问题(此处和此处)的理解,在 AWS Messaging for Spring Boot 中,必须将 @SqsListener 注释定义中的队列名称或队列 url 设置为 Spring 在启动时可以读取的静态字符串。您不能将其设置为变量或队列列表,以便您可以定义一种方法并让该方法作为所有这些 SQS 队列的处理程序。
我的应用程序中有超过 40 个队列。我想做的是取出其中一些队列,将它们放入列表中,并将其提供给 @SqsListener 注释,以便我可以为这 X 个队列使用一种方法,并将一组不同的队列 Y 放入另一个方法的注释。但我似乎做不到这一点。是对的吗?还有其他方法可以做到这一点吗?
我开始不喜欢spring-cloud-aws-messagingmaven 包的实现,在一个方法上使用 @SqsListener 注释,该方法“侦听”特定队列并在新消息出现时调用该方法。尤其重要的是,因为它迫使我使用 AWS Java SQS SDK 1.0,而不是能够使用 2.0。我宁愿在春季自己以某种方式管理民意调查,但我不知道该怎么做。如何在 Spring Boot 中轮询 SQS 队列列表?如果我可以将其配置为长轮询大约 20 秒(根据 AWS 的最大值),并且如果它找到一条消息,它会返回该消息并开始下一次轮询,我希望如此。这可能吗?
polling ×10
python ×2
ajax ×1
ajax-polling ×1
amazon-sqs ×1
asynchronous ×1
blocking ×1
c# ×1
cassandra ×1
events ×1
freebsd ×1
interrupt ×1
java ×1
jenkins ×1
long-polling ×1
monitoring ×1
mysql ×1
scripting ×1
sockets ×1
spring-boot ×1
wait ×1
web ×1