如何在性能测试期间以细粒度的方式控制 Tcl 的内存消耗?



在测试web应用程序性能的过程中,我想知道是否有人能给我指一组代码片段,这些代码片段可以在各种不同的内存相关环境下测试我的(基于Tcl的)web服务器的行为。

因此,最好有一个短进程来分配/使用预定义的内存量,将其保留预定义的时间,然后再次释放。

(我正在考虑一种方法,允许我使用jMeter调用这样的URL:http://example.com/alloc.tcl?memory=1GB&5秒后免费)

好吧,没有什么特别的,但你可以近似它。特别是,字符串的长度与用于分配它们的字节数非常对应(如果你使用ASCII),并且一旦不再引用空间,就会立即释放空间。

# Allocate a big chunk of data
set data [string repeat x 1000000000]
# Delay in milliseconds
after 5000
# Release the storage; local variables are unset automatically when a procedure exits
unset data

请注意,内存是否返回到操作系统并不重要,因为这取决于低级系统内存分配器的行为。还要注意,Tcl对2GB的单个内存对象的大小有绝对限制(因为一个已知的尴尬错误),所以最好将你的千兆字节分配到许多更小的部分,比如:

for {set i 0; set data {}} {$i < 1000} {incr i} {
    lappend data [string repeat x 1000000]
}

注意不要将$data转换为单个字符串。千兆字节大小的字符串可能随之而来,您很容易就冒着达到对象大小限制的风险。只要过一段时间你只需要unset data,一切都会好起来的。

您是否刚刚考虑过一个小型C应用程序,它需要两个参数,一个用于内存大小(以K为单位),另一个用于释放延迟(以秒为单位)?在这一点上,您只需要一个calloc()、sleep()和free()。然后,您可以在TCL代码中使用exec来启动它。

最新更新