Articles of 分段错误

NGINX + PHP5-FPM在高负载下发生段错误

我一整天都在处理这个问题,这让我疯狂。 所有Googlesearch结果和search都会导致死胡同。 我希望有人能和我一起为自己和未来的受害者提供解决scheme。 开始了。 我正在运行一个非常受欢迎的网站,每天有超过3M的页面浏览量。 平均而言,每秒钟的页面浏览量为34页,但在高峰时段更为实际,每秒页面浏览量超过300页。 把这些看作是要求。 我正在运行带有2个E5620 CPU,12GB RAM和一个Micron P300 6Gb / s SSD的Ubuntu 10.04 64位服务器。 在高峰时段,CPU和内存负载是平均的(20-30%的CPU和一半的内存使用)。 这个站点的软件是:NGINX,MySQL,PHP5-FPM,PHP-APC和Memcached。 好吧,现在最后的文章的肉,这里是我的错误日志。 有一堆这些错误logging。 在/ var /日志/ PHP5-FPM Jul 20 14:49:47.289895 [NOTICE] fpm正在运行,pid 29373 Jul 20 14:49:47.337092 [NOTICE]准备处理连接 Jul 20 14:51:23.957504 [错误] [pool www]无法检索一个或多个subprocess的活动。 稍后再试。 Jul 20 14:51:41.846439 [警告] [池www]孩子29534从开始114.518174秒后退出代码1 7月20 14:51:41.846797 [注意] [池www]孩子29597开始 七月20 14:51:41.896653 [警告] [池www]子29408退出信号11 […]

关于LINUX中的分段错误

我正在LINUX里做一个开发SIC / XE汇编程序的作业。 当我编写代码时,我遇到了一些错误,但是我不知道为什么会发生这种情况。 你能为我解释为什么会出现这个问题吗? 下面的代码显示了带有标记的'test.asm'文件。 178 printf("token1: %s \t",token1); 179 printf("token2: %s \t",token2); 180 printf("token3: %s \t",token3); 181 printf("token4: %s \t",token4); 182 printf("ss\nss"); 据此,特别是“ss \ nss”声明,我预计打印结果如下。 sstoken1: LDT token2: LENGTH token3: (null) token4: (null) ss sstoken1: WLOOP token2: TD token3: OUTPUT token4: (null) ss ss 但是,当我运行这个程序到最后,我遇到了分段错误,遇到了奇怪的情况。 sstoken1: OUTPUT token2: BYTE token3: X'05' token4: (null) […]

当mysql_stmt_close时出现Segfault错误

我想使用C API查询MySQL 5.5。 dbutil.c包含样板代码: #include "../include/dbutil.h" #include "../include/logging.h" #include "../include/common.h" MYSQL get_connection(char *host, char *user, char *passwd, char *db) { MYSQL conn; mysql_init(&conn); if (!mysql_real_connect(&conn, host, user, passwd, db, 0, NULL, 0)) { log_to_console("Cannot connect to MySQL server: %s", mysql_error(&conn)); exit(1); } return conn; } MYSQL_STMT prepare_stmt(MYSQL *conn, char *sql) { MYSQL_STMT *stmtP = mysql_stmt_init(conn); […]

为什么关于mmap的代码在(16384 + 1)字节而不是(4096 + 1)字节处得到段错误?

操作系统是Ubuntu。 在我看来,页面大小为4096,在第(4096 + 1)字节处应该得到段错误,但是在写入(16384 + 1)字节时得到段错误。 输出:… 16383一个分段错误 #include <sys/mman.h> // memory management. #include <sys/stat.h> // file stat. man 2 stat #include <fcntl.h> // O_CREAT #include <unistd.h> #include <errno.h> #include <stdio.h> int main(int argc, char* argv[]) { const int page_size = getpagesize(); printf("page_size: %d\n", page_size); int shm_fd = open("shm.temp", O_CREAT | O_RDWR, S_IRWXU); ftruncate(shm_fd, 1); […]

在Linux中为shm_open打印errno时发生分段错误

我在C语言中练习使用共享内存,下面是一个简单例子的代码: #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <errno.h> #define SIZE_OF_MEMORY sizeof(int) #define SHARED_MEMORY_NAME "GDM123456" int main() { int shm_fd = shm_open(SHARED_MEMORY_NAME, O_RDWR | O_CREAT | O_EXCL, 0777); if(shm_fd == -1) { printf("failed to open shared memory\n"); printf("shm_open error, errno(%d): %s\n", errno, strerror(errno)); […]

Segfault进程ID和核心转储进程ID是不同的。 为什么?

在Linux消息文件中,我注意到进程14947报告了一个段错误,但是我没有得到进程14947的核心转储,而是得到了14069.core。(它的生成时间与段错误的时间匹配)。 然后我使用gdb并find: – Program terminated with signal 11, Segmentation fault. [New process 14947] [New process 26131] [New process 26130] [New process 26129] [New process 26128] [New process 14945] [New process 14842] [New process 14726] [New process 14598] [New process 14069] 当我运行“信息线程”时,我得到: – (gdb) info thread 10 process 14069 0xffffe410 in __kernel_vsyscall () 9 process 14598 […]

在fortran程序中访问数组时发生分段错误

我有一个fortran程序。 子程序如下:程序执行1434行后出现分段错误,打印如下: i: 115 256 2 Segmentation fault (core dumped) 参数是n1 = 258,n2 = 258,n3 = 258。 NR = 46480。 为什么发生分段错误? 75 double precision u(nr),v(nv),r(nr),a(0:3),c(0:3) 76 common /noautom/ u,v,r …… 196 call zero3(u,n1,n2,n3) …… 1418 subroutine zero3(z,n1,n2,n3) 1419 1420 c——————————————————————— 1421 c——————————————————————— 1422 1423 implicit none 1424 1425 1426 integer n1, n2, n3 1427 double […]

在多个节点上发生MPI_Bcast错误

背景:我正在编写基于collfs项目的I / O系统调用的MPI版本。 代码在单个节点上的多个处理器上运行时没有错误。 但是,在多个节点上运行会导致分段错误…每个节点有2个进程(每个进程1个进程)的错误消息如下所示: $ qsub test.sub $ cat test.e291810 0: pasc_open(./libSDL.so, 0, 0) 1: pasc_open(./libSDL.so, 0, 0) 1: mptr[0]=0 mptr[len-1]=0 1: MPI_Bcast(mptr=eed11000, len=435104, MPI_BYTE, 0, MPI_COMM_WORLD) 0: mptr[0]=127 mptr[len-1]=0 0: MPI_Bcast(mptr=eeb11000, len=435104, MPI_BYTE, 0, MPI_COMM_WORLD) _pmiu_daemon(SIGCHLD): [NID 00632] [c3-0c0s14n0] [Sun May 18 13:10:30 2014] PE RANK 0 exit signal Segmentation fault [NID 00632] […]

尝试克隆函数时发生分段错误(在C中)

我试图让康威的生活的游戏,当我有它单线程,它完美的作品,但如果我尝试使用克隆(),使其产生分割错误。 如果可能的话,谁能帮我弄清楚为什么? 主要 int main(int argc, char *argv[]) { const int STACK_SIZE=65536; int checkInit=0; int i; int j; int *stack; int *stackTop; FILE *file1; int numThreads; if(argc != 3) { fprintf(stderr, "Usage: %s <Executable> <Input file> <Threads>\n", argv[0]); exit(1); } file1=fopen(argv[1],"r"); if(file1==NULL) { //check to see if file exists fprintf(stderr, "Cannot open %s\n", argv[1]); exit(1); […]

C常量全局内存段错误(在地址上存在)

我正在研究象棋引擎,并且在查找表中存储了大量预先计算的值。 我把这些值放入一个(非常大的)'magic_numbers.c'文件(来自名为magic bitboard的algorithm),并将它们声明为全局常量内存。 程序执行期间,这些值永远不会改变。 我最近碰到了一个seg。 过于古怪的错误。 (首先,这很奇怪,因为它挂在我的整个计算机!)更重要的是,地址是完全可访问的(请注意下面的GDB输出)。 程序收到信号SIGSEGV,分段故障。 [切换到线程0x7ffe8dd77700(LWP 9001)] 0xc000000000040c9b9在magic_get_king_moves(occ = 0,square = 28'\ 034')/home/jordan/Projects/thekingsmen/magic.h:107 107回复magic_king_moves [square]; (gdb)p magic_king_moves [28] $ 1 = 241461362688 (gdb)p bitboard_print(magic_king_moves [28]) 棋盘 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 […]