我在Gentoo Linux 64位下编写NodeJS 6.3.1应用程序。 在这台机器上,我通常拥有9GB的16GB可用内存和49GB的交换空间。
我使用以下代码来测试node.js应用程序的内存限制:
override func viewDidLoad() {
super.viewDidLoad()
self.setBottomBorder(self.textFieldEmailAddress, width: 0.4)
self.setBottomBorder(self.textFieldPassword, width: 0.4)
self.setBottomBorder(self.passwordBtn, width: 0.4)
}
func setBottomBorder(view: UIView, width: CGFloat) {
let border = CALayer()
border.name = "BottomBorder"
border.borderColor = UIColor.blueColor().CGColor
border.frame = CGRect(x: 0, y: view.frame.size.height - width,
width: view.frame.size.width, height: width)
border.borderWidth = width
view.borderStyle = UITextBorderStyle.None
view.layer.addSublayer(border)
view.layer.masksToBounds = true
}
func removeBottomBorder(view: UIView) {
if let sublayers = view.layer.sublayers {
for layer: CALayer in sublayers {
if layer.name == "BottomBorder" {
layer.removeFromSuperlayer()
break
}
}
}
}
func textFieldDidBeginEditing(textField: UITextField) {
self.removeBottomBorder(textField)
self.setBottomBorder(textField, width: 0.8)
if (textFieldPassword == textField) {
self.setBottomBorder(self.passwordBtn, width: 0.8)
}
}
func textFieldDidEndEditing(textField: UITextField) {
self.removeBottomBorder(textField)
self.setBottomBorder(textField, width: 0.4)
if (textFieldPassword == textField) {
self.removeBottomBorder(self.passwordBtn)
self.setBottomBorder(self.passwordBtn, width: 0.4)
}
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
运行此脚本时没有额外的参数到节点,最后一个memoryUsage行是这样的:
var arr = [];
var c=0;
while(arr.push('foo')) {if (++c%100000 == 0) {console.info(process.memoryUsage());}}
现在运行带有{ rss: 1032232960, heapTotal: 1015185408, heapUsed: 1008680024 }
的node.js,最后一个memoryUsage行是:
--max_old_space_size=4096
现在有8000限制:
{ rss: 2202341376, heapTotal: 2189082624, heapUsed: 2177311480 }
我错过了什么?如何将堆增加到4或8GB?
答案 0 :(得分:1)
我认为这是V8的限制。它在64位计算机上不使用超过1.7 GB的RAM。引用常见问题解答:
目前,默认情况下,v8在32位上的内存限制为512mb 系统,以及64位系统上的1GB。可以通过设置来提高限制 --max-old-space-size最大为~1gb(32位)和~1.7gb(64位),但建议您拆分单个进程 如果你达到记忆限制,你可以分成几个工人。