我正在尝试通过 PHP(CentOS 6 和 7)中的 ODBC 驱动程序连接到 Snowflake,并利用 PDO 来更轻松地访问。
ODBC 驱动程序似乎已安装并正常工作,因为 PHP 中的本机 ODBC 函数运行得很好:
$dsn = "Driver=SnowflakeDSIIDriver;Server=" . SNOWFLAKE_HOST;
$dsn .= ";Account=" . SNOWFLAKE_ACCOUNT;
$dsn .= ";Port=" . SNOWFLAKE_PORT;
$dsn .= ";Schema=" . SNOWFLAKE_SCHEMA;
$dsn .= ";Warehouse=" . SNOWFLAKE_WAREHOUSE;
$dsn .= ";Database=" . SNOWFLAKE_DATABASAE;
$conn_id = odbc_connect($dsn, SNOWFLAKE_USER, SNOWFLAKE_PASSWORD);
odbc_exec($conn_id, "USE WAREHOUSE " . SNOWFLAKE_WAREHOUSE);
$res = odbc_exec($conn_id, 'SHOW TABLES IN SCHEMA ' . SNOWFLAKE_SCHEMA . ';');
if ($res) {
print "Tables in schema\n";
while($row = odbc_fetch_array($res)) { …Run Code Online (Sandbox Code Playgroud) 我正用这个问题把头撞在墙上。我们正在并行运行许多容器,它们正在运行简单的文件系统操作或简单的linux命令,并且其中某些在某些情况下会因内存分配问题而失败,Docker容器会出现OOMKiled。
我相信它与特定命令无关。tail不是唯一失败的命令,我们也遇到过cp或gzip。
我们已经缩小了问题的范围,并创建了一个脚本,当参数根据底层系统进行相应调整后,几乎可以肯定会失败。
https://github.com/keboola/processor-oom-test
具有默认设置的脚本会生成具有100M行(〜2.5GB)的随机CSV,将其复制20次,然后运行20个运行中的容器tail -n +2 ...。在m5.2xlarge具有1TB SSD 的AWS EC2实例上,某些容器被OOMKilled(某些容器具有不同的错误)。进程因各种错误而终止:
/code/tail.sh: line 2: 10 Killed tail -n +2 '/data/source.csv' > '/data/destination.csv'
tail: error reading '/data/source.csv': Cannot allocate memory
tail: write error
Run Code Online (Sandbox Code Playgroud)
(最后一个不是OOMKilled)
我不知道该tail消耗任何内存。如果可以同时工作的容器数量足够少,则可以轻松使用64MB的内存。对于更大数量的容器,即使256MB内存也不够用。我一直在观察htop,docker stats还没有看到内存消耗的任何峰值。
我们已经尝试过的事情
其中一些只提供了部分帮助。调整内存限制或容器数量会使它每次都再次崩溃。我们有一个带有1GB内存的容器,tail使用OOMKilled可以在大型文件崩溃时简单地运行。
关于几个月前我尝试过的内容-https: //500.keboola.com/cp-in-docker-cannot-allocate-memory-1a5f57113dc4。而--memory-swap原来只仅仅是一个局部的帮助。
有什么建议么?我不是Linux专家,所以我可能缺少一些重要的东西。任何帮助或建议,我们将不胜感激。