最近在解决探针获取Ruby应用服务器的内存使用的情况,将解决的思路总结一下,希望对此感兴趣的伙伴一起探讨。
先对比应用服务器: Puma 和 Passenger ,下面对比这2个服务器内存统计,
单进程模式:直接获取进程id: Processpid
cluster模式:以启动2个worker进程为例:
从上面截图可以看到,Puma启动后会出现3个进程:1个master进程和2个worker进程。
内存的使用情况(见 RSS 列):
而对于探针来说,一个探针实例是伴随进程一起启动的,也就说一个探针只能识别自己所在的进程id,那如何获取应用服务器使用的内存?我们用其中1个woker进程所在的进程组[ PGID ]看一下:(为啥不是父进程, 见下文Passenger)
这3个进程都在相同的进程组里,而且进程组号为master的进程id,那我们就可以用这个信息获取应用服务器的所使用的内存:
4累加进程组内进程内存和即为应用服务器使用内存:
启动Passenger后的Process信息:
对Passenger架构感兴趣的请移步到 这儿
查看一下worker所在进程组和父进程:
通过PPID可以看出
Passenger core —> Passenger AppPreloader —> Passenger RubyApp
三者为爷-父-子关系,当服务器请求量增大时 AppPreloader 会产生新的进程来响应请求,从而新的 RubyApp 进程的 PPID 即为 AppPreloader 的 PID ,这样看来就可以将同一个 PPID 的进程加起来得到应用服务器的内存?
由于Passenger会根据服务器的负载量动态调整进程数,当服务器请求量较小时,Passenger会kill多余的进程,会出现下面的情况:
AppPreloader 也被Passenger杀掉了。原 RubyApp 进程的 PPID 变成了1。这时如果服务器的请求量增大,应用服务器进程会成为这样:
Passenger core 产生新的 AppPreloader 进程,并且 AppPreloader 产生新的 RubyApp 进程,这时如果只用 PPID 统计应用服务器内存就会不准确,所以要统计Passenger的使用的内存还得通过累加在同一个进程组( PGID )的所有进程使用的内存和得到。
由于 Unicorn 和 Rainbows 都与Puma的cluster模式[master+worker模式]类似,内存统计的方式可以参考上文的Puma。
由于 Thin 启动多个server后没有类似的特点,上面方法不适用于Thin,有好方法的伙伴们可以告知:smile:
在解决探针统计应用服务器的内存问题上,摸索出了上面的一条路子,如果小伙伴们有其他更好的方式,可以一起探讨一下。
C语言运算快啊,高级语言越来越流行只是因为计算机速度比原来快很多,所以人类可以用运行时的效率为代价来换取开发时的效率。在对运算速度要求高的地方还是需要用C。
另外,Java和net是强类型的语言,在编译时、或者甚至在编写时就能发现错误,在开发复杂的大项目的时候这个很有必要,这种情况下用python的话在integration test的时候说不定就要出现只知道有错却找不到错误在哪儿的情况。
python、ruby、javascript这些都是开发小项目多,之所以这几年流行,是因为初创企业最开始使用这些很方便。但是当他们长大之后,还是经常要用别的语言重写的。比如facebook用java写了他们专门的数据库cassandra,twitter用java重写他们原来的ruby on rails写的服务器。
所以,编程语言并不是像你想象的那样容易淘汰的,即使是50年代就出现的fortran,依然是每隔几年就有新版本,至今仍然在天文学、气象学、流体力学、生物学、化学、经济学等等这些需要高强度计算来模拟一个模型的领域里被广泛使用。
1 Python:Python是一种开源的解释型编程语言,其源代码可以自由地获取、使用、修改和分发,因此它被认为是开源软件。
2 Ruby:Ruby是一种开源的面向对象编程语言,其源代码可以自由地获取、使用、修改和分发,因此它也被认为是开源软件。
3 Perl:Perl是一种解释型的开源编程语言,其源代码可以自由地获取、使用、修改和分发,因此它也被认为是开源软件。
综上所述,Python、Ruby和Perl都是开源的软件。开源软件的特点是其源代码可以被自由地获取、修改和分发,这使得开源软件可以更加灵活和适应性强。
这里时区的分辨率不是小时,而是1/4小时,也即15分钟,所以3215/60=8小时
数据格式比较简单,易于读写,格式都是压缩的,占用带宽小,浏览器解析快。
易于解析这种语言,客户端JavaScript可以简单的通过eval()进行JSON数据的读取。构造友好,支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析。
扩展资料:
CDMA网络时间服务器是针对自动化系统中的计算机、控制装置等进行校时的高科技产品,CDMA网络时间服务器它从CDMA基站上获取标准的时间信号,将这些信息通过各种接口类型来传输给自动化系统中需要时间信息的设备(计算机、保护装置、故障录波器、事件顺序记录装置、安全自动装置、远动RTU),这样就可以达到整个系统的时间同步。
参考资料来源:百度百科-网络分析
以上就是关于探讨如何统计Ruby应用服务器使用内存方法全部的内容,包括:探讨如何统计Ruby应用服务器使用内存方法、现在计算机语言这么多有C#、C++、Java什么VB甚至现在还出现了Python和ruby可我没那么的时间学啊、下面几个后台脚本编程语言中,哪个属于开源的软件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)