nginx使用zookeeper造成进程死锁和崩溃问题和解决方案
2016-09-05 10:57
776 查看
by:jasonsalex
date:2016/09/05
csdn:http://blog.csdn.net/rushroom
github:https://github.com/jasonsalex/nginx_zookeeper
1.使用zk多线程的方式,会使nginx造成进程死锁,和程序崩溃。建议使用zl单线程库_st.o
2.使用nginx的事件轮询机制代替zookeeper的多线程事件轮询机制。
3.提供如下代码方案:
(1)通过nginx处理zk时间队列
static void ngx_http_zookeeper_process_event(ngx_event_t *ev)
{
ngx_http_zookeeper_main_conf_t *zmf;
zmf = (ngx_http_zookeeper_main_conf_t *)ngx_http_cycle_get_module_main_conf(ngx_cycle, ngx_http_zookeeper_module);
int fd, interest, events;
fd_set rfds, wfds, efds;
FD_ZERO(&rfds);
FD_ZERO(&wfds);
FD_ZERO(&efds);
struct timeval tv;
zookeeper_interest(zmf->handle, &fd, &interest, &tv);
tv.tv_sec = 0;
tv.tv_usec = 0;
if (fd != -1) {
if(interest&ZOOKEEPER_READ)
{
FD_SET(fd, &rfds);
} else {
FD_CLR(fd, &rfds);
}
if(interest&ZOOKEEPER_WRITE)
{
FD_SET(fd, &wfds);
} else{
FD_CLR(fd, &wfds);
}
} else{
fd = 0;
}
if (select(fd+1, &rfds, &wfds, &efds, &tv) < 0)
{
printf("[%s %d]select failed, err=%d, msg=%s\n", __FUNCTION__, __LINE__, errno, strerror(errno));
}
events = 0;
if (FD_ISSET(fd, &rfds))
{
events = ZOOKEEPER_READ;
}
if (FD_ISSET(fd, &wfds))
{
events = ZOOKEEPER_WRITE;
}
zookeeper_process(zmf->handle, events);
ngx_http_zookeeper_process_event_timer((ngx_socket_t)-2, 10, ngx_http_zookeeper_process_event);
}
(2)添加到nginx 时间处理队列
static void ngx_http_zookeeper_process_event_timer(ngx_socket_t fd,ngx_msec_t time, void * call_back_p)
{
zk_process_event_dummy.fd = fd;
ngx_memzero(&zk_process_event_timer, sizeof(ngx_event_t));
zk_process_event_timer.handler = call_back_p;
zk_process_event_timer.log = ngx_cycle->log;
zk_process_event_timer.data = &zk_process_event_dummy;
ngx_add_timer(&zk_process_event_timer, time);
}
相关文章推荐
- 使用nginx做负载均衡造成的session共享问题
- 探讨由于死锁或进程阻塞造成的ASP突然不能访问的问题
- iOS保存系统相册中的照片到应用沙盒中出现的问题--图片旋转90度,使用CGImageRelease造成应用崩溃
- 使用Nginx做反向代理时在error.log中出现server_names_hash_bucket_size大小不足问题的解决方案
- nginx 使用安装问题及解决方案
- Nginx启动以后没有进程的问题解决方案
- umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android
- 总结Nginx 的使用过程中遇到的问题及解决方案
- Mac系统开发常见问题-80端口被占用的解决方案2-使用Nginx解决
- 关于使用Session/Cookie存中文乱码造成的问题解决方案
- 主外键造成ORA-00060死锁问题的解决方案
- 使用hungtask 检测异常进程/内核死锁/超时阻塞问题
- ios使用第三方库造成崩溃的问题
- FindContours()函数使用时导致的程序崩溃问题的解决方案
- umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android
- kazoo在多进程下使用全局连接死锁问题
- MFC项目使用webbrowser控件,点击载入的页面里的文件下载链接后导致程序的崩溃问题的解决方案
- MFC中使用FindContours()函数使用时导致的程序崩溃问题的解决方案
- nagios使用中两大问题的解决方案 推荐
- 使用Mencoder进行视频转换遇到的问题和相关解决方案