在运行时以编程方式检测Heroku dyno大小?
假设我有一个Heroku应用程序,随着时间的推移或由不同的用户部署到不同大小的dynos上。如何可靠地确定应用程序运行的dyno大小?我知道在运行时以编程方式检测Heroku dyno大小?,heroku,Heroku,假设我有一个Heroku应用程序,随着时间的推移或由不同的用户部署到不同大小的dynos上。如何可靠地确定应用程序运行的dyno大小?我知道$DYNO会告诉我进程名是什么(例如web.123或worker.456),但没有一个Heroku环境变量指出这是256MB 1X、1024MB 2X还是6GB PX DYNO。Heroku支持人员提供了这个答案,他们拒绝记录,因为这是一个黑客行为,他们打算在未来提供一个合理的解决方案 实现这一点的唯一方法是抛出并调用ulimit-u,以获得最大数量的任务。
$DYNO
会告诉我进程名是什么(例如web.123
或worker.456
),但没有一个Heroku环境变量指出这是256MB 1X、1024MB 2X还是6GB PX DYNO。Heroku支持人员提供了这个答案,他们拒绝记录,因为这是一个黑客行为,他们打算在未来提供一个合理的解决方案
实现这一点的唯一方法是抛出并调用ulimit-u
,以获得最大数量的任务。256个用于1X dynos,512个用于2X,最大值由PX的LINUX支持
Bash示例:
function dyno_size() {
case $(ulimit -u) in
256)
echo "1X"
;;
512)
echo "2X"
;;
32768)
echo "PX"
;;
*)
echo "unknown"
;;
esac
}
我不确定这比前面的答案好多少,但Heroku的答案是使用
/sys/fs/cgroup/memory/memory.limit_in_bytes
有一个
$DYNO\u RAM
变量
它与dyno类型相关,再加上$dyno
就足够了