问题标签 [zts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
106 浏览

php - 在 PHP 7.3.4 中调用获取资源间歇性地返回 nullptr

我正在调查当我们的 C++ 程序在 PHP 7.3.4 中调用 ts_resource(0) 时发生的崩溃。

代码是由一个已经离开公司的开发人员编写的,我对 PHP 知之甚少。原始代码是为 PHP 5.3 编写的,多年来一直运行良好,但是当 PHP 升级到 7.3.4 时,我们的程序开始间歇性地崩溃。我发现崩溃是由返回 nullptr 的 tsrm_get_ls_cache() 调用引起的。我添加了对 nullptr 的检查,因此停止了崩溃,但我想知道为什么获取资源的调用返回 nullptr 以及我能做些什么来防止它。我认为问题与内存有关,因为它是间歇性的。

我不确定要显示什么代码,因为我们的代码中对 PHP 的调用很广泛。PHP 是在启用 ZTS 的情况下编译的,因此它是多线程的。

在初始化阶段,线程安全管理器以以下方式启动:

以及每次调用 PHP 代码时调用的 Execute 函数以:

接下来在调用之前对上下文类进行一些初始化 php_request_startup(TSRMLS_C);

当获取资源调用失败时,实际失败是因为malloc失败:在Execute函数开头调用ts_resource(0)调用下面的PHP函数分配新资源:

并且此对 malloc 的调用使分配失败

static void allocate_new_resource(tsrm_tls_entry **thread_resources_ptr, THREAD_T thread_id) { (*thread_resources_ptr) = (tsrm_tls_entry *) malloc(sizeof(tsrm_tls_entry)); ...

如果有人能提出资源分配可能失败的任何原因,我将不胜感激。

0 投票
0 回答
241 浏览

php - 如何在ubuntu18.04上启用zts并重新编译php

我不是本地人,对不起我的语法不好。

我在 Ubuntu 18.04 上使用 PHP 7.3.8,我想启用ZTS并重新编译 PHP。我已经尝试了几次,但没有奏效。

你可以指导我吗?

我试过https://www.rapidspike.com/blog/php7-pthreads/

在步骤 2 中,

我收到了这个错误:

然后我用这个:

但我又遇到了同样的错误。

0 投票
4 回答
2939 浏览

php - 如何在 Windows 和 wampserver 上安装新的 php 并行(7.2+)

新的 php并行。它是新的,在任何地方都没有关于它的故障排除,关于它的唯一文档是 php.net 本身,这还不够。

这就是我所做的(根据说明):

  • 安装了最新版本的 WAMP(3.1.9 x64)。
  • 在 WAMP 上安装了最新版本的 PHP(7.3.9)。
  • 将 PHP 添加到 windows 系统环境路径。
  • 将 pthreadVC2.dll 添加到 PHP 文件夹并将 pthreadVC2.dll 添加到 Windows 系统环境路径。
  • 添加php_parallel.dll到 php/ext 目录。
  • 添加extension=parallel到 php.ini。
  • 重新启动了一切。

花费的时间。现在windows cmd说:
“致命错误:未捕获的错误:在... [我的文件地址]中找不到类'parallel \ Runtime'”
并且wampserver仅在我使用并行的页面上说“连接已重置(firefox错误)” \Runtime 和其他页面工作正常。
如果您根本不知道答案,请恕我直言,不要将我的问题标记为广泛的一件事或任何其他事情。至少给我一些链接。

0 投票
1 回答
1292 浏览

php - 为什么默认禁用 PHP ZTS?

为什么ZTS默认是禁用的,我们要编译PHP源码来实现Threading能力?启用时是否有任何限制或副作用ZTS?不稳定吗?

0 投票
1 回答
311 浏览

php - 在 MAC OS X 上启用 ZTS 重新编译 PHP

Homebrew PHP 不支持线程安全的 php 二进制文件。有什么方法可以在 brew 版本中启用 ZTS。

我也尝试了 phpbrew,但是我收到一个错误“命令太长”。您能否建议我在 MACOS Catalina 中启用 ZTS 的最佳方法。

0 投票
0 回答
137 浏览

php - 如何修复运行 PHP 和 Pthreads 的 Codeigniter 应用程序中的内存泄漏?致命错误:已用完 2147483648 字节的允许内存大小

我在 Nginx 和 PHP-FPM 之上运行 CodeIgniter 应用程序。

PHP 是在 ZTS 和 Pthreads 支持下手动编译的

我正在尝试使用 CLI 中的 cron (php spark task:run tasks) 从应用程序运行挂起的任务,并且每次都会收到此错误:

这是与错误相关的代码:

当任务使用其多线程时,似乎存在一些与 pthread 相关的内存泄漏问题。

到目前为止我尝试解决的问题:

1) 我在 PHP CLI .ini 文件中设置了 2GB RAM 的内存限制

2)我尝试通过在 spark 命令之前运行 php -d memory_limit=2048M 来强制内存大小

3)我尝试直接在Codeigniter中更改内存

这真的令人沮丧,此时我什至不知道这是代码问题还是服务器端问题,有没有人知道可能出了什么问题?谢谢

0 投票
1 回答
37 浏览

php - 出于安全原因已禁用 setlocale()

parallel安装了运行 Laravel 7的扩展的 PHP 7.4.16 (ZTS) 。

ini_get('disable_functions');返回一个空字符串。

我可以编写一个从主进程调用的脚本,setlocal(0,0)它可以正常工作而不会引发异常。当库尝试从parallel/Runtime线程中调用它时,会引发此错误。

我已经转储了parallel\Runtime线程内部和外部的所有 ini 设置。它们完全匹配,并且该功能未标记为禁用。

编译时指令是否以某种方式禁用了此功能?