[
https://issues.apache.org/jira/browse/THRIFT-2611?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ian Babrou updated THRIFT-2611:
-------------------------------
Attachment: thrift-php-infinite-cycle.patch
Patch that should fix the problem
> Thrift php bindings hang up
> ---------------------------
>
> Key: THRIFT-2611
> URL: https://issues.apache.org/jira/browse/THRIFT-2611
> Project: Thrift
> Issue Type: Bug
> Components: PHP - Library
> Environment: Linux 3.3.1, php-5.3.8-pl0-gentoo
> Reporter: Ian Babrou
> Attachments: thrift-php-infinite-cycle.patch
>
>
> Stracing php process that eats 100% cpu showed the next pattern:
> poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=4,
> revents=POLLIN|POLLERR|POLLHUP}])
> recvfrom(4, "", 1, MSG_PEEK, NULL, NULL) = 0
> select(5, [4], [], [], {0, 20000}) = 1 (in [4], left {0, 19999})
> recvfrom(4, "", 4, 0, NULL, NULL) = 0
> poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=4,
> revents=POLLIN|POLLERR|POLLHUP}])
> recvfrom(4, "", 1, MSG_PEEK, NULL, NULL) = 0
> select(5, [4], [], [], {0, 20000}) = 1 (in [4], left {0, 19999})
> recvfrom(4, "", 4, 0, NULL, NULL) = 0
> poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=4,
> revents=POLLIN|POLLERR|POLLHUP}])
> recvfrom(4, "", 1, MSG_PEEK, NULL, NULL) = 0
> select(5, [4], [], [], {0, 20000}) = 1 (in [4], left {0, 19999})
> recvfrom(4, "", 4, 0, NULL, NULL) = 0
> poll([{fd=4, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 1 ([{fd=4,
> revents=POLLIN|POLLERR|POLLHUP}])
> recvfrom(4, "", 1, MSG_PEEK, NULL, NULL) = 0
> select(5, [4], [], [], {0, 20000}) = 1 (in [4], left {0, 19999})
> recvfrom(4, "", 4, 0, NULL, NULL) = 0
> Attaching gdb made this picture more clear:
> (gdb) dump_bt executor_globals.current_execute_data
> [0x259ef3c8] read()
> /project-path/vendor/thrift/lib/Thrift/Transport/TTransport.php:74
> [0x259ef110] readAll()
> /project-path/vendor/thrift/lib/Thrift/Transport/TFramedTransport.php:139
> [0x259eeb78] readFrame()
> /project-path/vendor/thrift/lib/Thrift/Transport/TFramedTransport.php:106
> [0x259ee8e8] read()
> /project-path/vendor/thrift/lib/Thrift/Transport/TTransport.php:74
> [0x259ee608] readAll()
> /project-path/vendor/thrift/lib/Thrift/Protocol/TBinaryProtocol.php:305
> [0x259ede70] readI32()
> /project-path/vendor/thrift/lib/Thrift/Protocol/TBinaryProtocol.php:197
> [0x259ed5a0] readMessageBegin()
> /project-path/vendor/thrift/packages/Scribe/Thrift/scribe.php:61
> [0x259ed450] recv_Log()
> /project-path/vendor/thrift/packages/Scribe/Thrift/scribe.php:30
> [0x259ecfa8] Log() /project-path/src/Framework/Logger/ScribeHandler.php:126
> [0x259ecc20] write()
> /project-path/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php:37
> [0x259ec070] handle()
> /project-path/vendor/monolog/monolog/src/Monolog/Logger.php:264
> [0x259ebef8] addRecord()
> /project-path/vendor/monolog/monolog/src/Monolog/Logger.php:485
> [0x259eabe0] warn() /project-path/lib/Cron/CronManager.php:419
> [0x259ea2a0] update()
> /project-path/src/Topface/SortedSet/Script/ProcessorCronScript.php:80
> [0x259e9c20] run()
> /project-path/src/Topface/NewDispatcher/NewScriptDispatcher.php:80
> [0x259e97e0] dispatch() /project-path/lib/Application.php:359
> [0x259e41b0] run() /project-path/config/run.php:268
> [0x259e4050] ??? /project-path/bin/cron:10
> Lsof on process with the same behavior and problem fd showed:
> php 25612 www 16u sock 0,5 0t0 4049585261 can't identify protocol
> Looks like php does not expose error (POLLERR is there), and allows to read
> empty buffer what thrift happily does. EOF doesn't happen and cpu is wasted
> in infinite cycle.
--
This message was sent by Atlassian JIRA
(v6.2#6252)