我在服务器上安装了 Ubuntu 12.04。每个注册用户也被注册为 linux 用户并通过 /etc/security/limits.conf 被限制系统资源访问。
我尝试以注册用户之一的身份运行服务器。该应用程序是一个 nodejs 应用程序 - http://github.com/pocha/terminal-codelearn。它使用https://github.com/chjj/pty.js为来到 nodejs 应用程序的每个用户创建一个伪终端。
该应用程序失败,“forkpty(3) failed”错误指向https://github.com/chjj/pty.js/blob/65dd89fd8f87de914ff1814362918d7bd87c9cbf/src/unix/pty.cc的第 184 行
pid_t pid = pty_forkpty(&master, name, NULL, &winp);
if (pid) {
for (i = 0; i < argl; i++) free(argv[i]);
delete[] argv;
for (i = 0; i < envc; i++) free(env[i]);
delete[] env;
free(cwd);
}
switch (pid) {
case -1:
return ThrowException(Exception::Error(
String::New("forkpty(3) failed.")));
我能够在http://nitrous.io上成功部署该应用程序。他们可能与监狱用户有类似的方式。我尝试运行ulimits -a
并匹配除挂起信号之外的每个值。不知何故,在我的服务器上,最大挂起信号值不超过 90k 左右,而在 Nitrous 服务器上为 584k。
下面是 Nitrous 服务器的 ulimit -a 输出
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 548288
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 512
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 256
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
该应用程序在 heroku 上失败,并出现完全相同的错误。
任何人都可以帮助如何使应用程序在我的服务器上运行,就像它在 nitrous.io 上的工作方式一样