défaut de segmentation hhvm dans un projet PHP

S’il vous plaît aider. Travailler sur un projet avec plus de 8 000 lignes de code dans une architecture de contrôleur frontal. Dès que j’essaie de charger une page, HHVM se bloque avec une erreur de segmentation. J’ai énuméré ci-dessous une stack empilée avec des éléments sensibles remplacés par ####.

Host: #### ProcessID: 29669 ThreadID: 7fda7cbff700 ThreadPID: 29676 Name: unknown program Type: Segmentation fault Runtime: hhvm Version: tags/HHVM-3.0.1-0-g97c0ac06000e060376fdac4a7970e954e77900d6 DebuggerCount: 0 Server_SERVER_NAME: #### Server: #### ThreadType: Web Request URL: /#### # 0 HPHP::bt_handler(int) at crash-reporter.cpp:0 # 1 killpg at /lib/x86_64-linux-gnu/libc.so.6:0 # 2 memcpy at /usr/bin/hhvm:0 # 3 get_tty_password at /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18:0 # 4 mysql_stmt_fetch at /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18:0 # 5 HPHP::MySQLStmt::fetch() at /usr/bin/hhvm:0 # 6 HPHP::c_mysqli_stmt_ni_fetch(HPHP::Object const&) at ext_mysqli.cpp:0 # 7 HPHP::Native::callFunc(HPHP::Func const*, HPHP::TypedValue*, HPHP::TypedValue*, int, HPHP::TypedValue&) at /usr/bin/hhvm:0 # 8 HPHP::Native::methodWrapper(HPHP::ActRec*) at /usr/bin/hhvm:0 # 9 void HPHP::ExecutionContext::dispatchImpl(int) at /usr/bin/hhvm:0 # 10 HPHP::ExecutionContext::enterVM(HPHP::ActRec*) at /usr/bin/hhvm:0 # 11 HPHP::ExecutionContext::invokeFunc(HPHP::TypedValue*, HPHP::Func const*, HPHP::Variant const&, HPHP::ObjectData*, HPHP::Class*, HPHP::VarEnv*, HPHP::SsortingngData*, HPHP::ExecutionContext::InvokeFlags) at /usr/bin/hhvm:0 # 12 HPHP::ExecutionContext::invokeUnit(HPHP::TypedValue*, HPHP::Unit*) at /usr/bin/hhvm:0 # 13 HPHP::invoke_file(HPHP::Ssortingng const&, bool, char const*) at /usr/bin/hhvm:0 # 14 HPHP::include_impl_invoke(HPHP::Ssortingng const&, bool, char const*) at /usr/bin/hhvm:0 # 15 HPHP::hphp_invoke(HPHP::ExecutionContext*, std::basic_ssortingng<char, std::char_traits, std::allocator > const&, bool, HPHP::Array const&, HPHP::VRefParamValue const&, std::basic_ssortingng<char, std::char_traits, std::allocator > const&, std::basic_ssortingng<char, std::char_traits, std::allocator > const&, bool&, std::basic_ssortingng<char, std::char_traits, std::allocator >&, bool, bool, bool) at /usr/bin/hhvm:0 # 16 HPHP::HttpRequestHandler::executePHPRequest(HPHP::Transport*, HPHP::RequestURI&, HPHP::SourceRootInfo&, bool) at /usr/bin/hhvm:0 # 17 HPHP::HttpRequestHandler::handleRequest(HPHP::Transport*) at /usr/bin/hhvm:0 # 18 HPHP::ServerWorker<std::shared_ptr, HPHP::FastCGITransportTraits>::doJobImpl(std::shared_ptr, bool) at /usr/bin/hhvm:0 # 19 HPHP::ServerWorker<std::shared_ptr, HPHP::FastCGITransportTraits>::doJob(std::shared_ptr) at /usr/bin/hhvm:0 # 20 HPHP::JobQueueWorker<std::shared_ptr, HPHP::Server*, true, false, HPHP::JobQueueDropVMStack>::start() at /usr/bin/hhvm:0 # 21 HPHP::AsyncFuncImpl::threadFuncImpl() at /usr/bin/hhvm:0 # 22 HPHP::AsyncFuncImpl::ThreadFunc(void*) at /usr/bin/hhvm:0 # 23 start_thread at /lib/x86_64-linux-gnu/libpthread.so.0:0 # 24 __clone at /lib/x86_64-linux-gnu/libc.so.6:0 PHP Stacktrace: #0 mysqli_stmt->fetch() called at [/####.php:58] #1 page->load() called at [/####.php:12] #2 page->__construct(Object of class dependency could not be converted to ssortingng) called at [/####.php:32] 

La version 3.0.1 était connue pour provoquer des erreurs de segmentation. La version 3.1 a été lancée hier et apparemment elle corrige les erreurs de segmentation pour la plupart des situations 1 . Vous devriez envisager une mise à niveau, peut-être que cela fonctionnera.

Il y a encore quelques problèmes avec ceci, voir par exemple celui-ci .

Cela a été signalé comme deux problèmes distincts sur le github hhvm: https://github.com/facebook/hhvm/issues/2921 et https://github.com/facebook/hhvm/issues/2377 .

La partie qui me saute le plus aux yeux est qu’elle échoue sur la fonction “get_tty_password”, qui est ce qu’elle fait pour vous demander de saisir votre mot de passe mysql sur le clavier (par exemple, si vous tapez “mysql -p vous invite “Entrez le mot de passe:”.) Évidemment, demander comme cela est une absurdité si elle est exécutée via HHVM.

Bien que le comportement de segmentation par défaut HHVM ne soit pas un comportement attendu, et qu’il existe des problèmes ouverts pour résoudre le problème lui-même, la cause la plus probable est que votre application ne définit pas le mot de passe dans votre connexion mysqli. Vérifiez que ce mot de passe est défini (essayez de le définir explicitement dans la chaîne de connexion que vous utilisez, car il pourrait être en train d’essayer de le charger à partir d’une variable non définie).