Linux每进程线程数问题处理
转载:http://qingzhu2640.blog.163.com/blog/static/954158312010101210161426/
公司的一台服务器升级,原先运行正常的一个服务经常会跳出,于是予以分析解决。
该服务是一个tcp的服务端程序,被动接收客户端连接处理数据,升级后当客户端连接到一定量后程序会自动跳出。
使用netstat查看各个状态的数量
netstat -na |awk ‘{print $6}’|sort |uniq -c |sort -nr
发现很多的CLOSE_WAIT,并且还在不断增加中。
觉得可能是CLOSE_WAIT得不到释放,占用很多资源,
于是修改sysctl.conf中关于tcp连接的连接时间等设置,结果问题依旧。
怀疑收到攻击,使用
netstat -na |grep CLOSE_WAIT|awk ‘{print $5}’|awk -F”:” ‘{print $1}’|sort |uniq -c |sort -nr |wc -l 查看连接过来的地址,发现都是地址来源都是正常的
首先检查
使用 ps -fe |grep programname 查看获得进程的pid
再使用 ps -Lf pid 查看对应进程下的线程数,发现数值为303,远小于实际应该的数量。于是初步判断是由于线程数不够造成的原因。查找资料发现可以通过设置 ulimit -s 来增加每进程线程数。
每进程可用线程数 = VIRT上限/stack size
其中 VIRT 上限: 32位x86 = 3G 64位x64=64G
statck size 默认是 10240 因此在默认情况下
32位系统上单进程最多可以创建300个线程,
64系统在内存充足的情况下最多可以创建 6400 个线程。
在机器硬件固定的情况下,可以通过 ulimit -s 降低stack size 的设置值来获得更多的每进程线程数。
Linux查看进程中运行线程数
ps -Tfp PID
cat /proc/${pid}/stat | awk '{print $20}'
Linux关于JVM最大线程数
http://www.iteye.com/topic/1035818
分享到:
相关推荐
linux进程的最大线程数 及最大进程数.zip
linux下的进程、线程
综上所述,Linux进程线程编程的学习笔记整理涵盖了进程的基本概念、进程的创建与管理、进程类型、进程状态转换、线程编程、进程间通信和信号处理等多个方面。掌握这些知识点对于深入理解Linux操作系统运行机制、编写...
在Linux操作系统中,进程和线程是两个核心概念,它们是程序执行的载体。本教程“linux 进程线程小程序”将深入探讨这两个概念,以及如何利用信号量、管道和共享内存进行进程间的通信。 首先,让我们了解什么是进程...
在操作系统课程设计中,Linux进程与线程的通信是一个核心且复杂的主题。在这个项目中,学生将深入理解操作系统内核如何管理和协调不同进程和线程之间的数据交换,从而实现高效的任务执行。以下是对这个主题的详细...
在Linux操作系统中,进程间通信(IPC,Inter-Process Communication)和多线程编程是实现高效并发处理的关键技术。本文将深入探讨这两种技术,并结合"全双工邮箱通讯"的源码实例,来阐述如何利用它们实现数据交换。 ...
linux进程线程
在Linux系统中,进程是程序的一次执行实例,每个进程都有自己的独立内存空间,因此它们之间的数据交换需要借助于特定的通信手段。这些手段包括管道(Pipe)、命名管道(Named Pipe)、信号量(Semaphore)、消息队列...
为了解决Linux环境下的线程不足问题,可以通过修改系统配置来增加最大进程数和最大文件描述符数。具体步骤如下: #### 修改`limits.conf` 在`/etc/security/limits.conf`文件中,可以增加或修改以下行: ``` * ...
总结来说,这个实训项目涵盖了Linux下的多线程编程、进程间同步、文件I/O以及信号处理等核心概念,是深入理解和应用操作系统原理的良好实践。通过实际编写和调试he.c代码,你将能够更好地掌握这些知识点,并提升在...
### Linux进程与线程创建详解 #### 进程与线程的概念 在深入探讨Linux下C语言编程中进程和线程的创建之前,我们先来理解一下进程与线程的基本概念。 - **进程**:是操作系统进行资源分配和调度的基本单位,每个...
详细介绍了linux下的程序、进程、线程的区别与共同点,是学习linux不可多得的好帮手
父进程创建三个子线程,第一个子线程对数组的前半部分进行选择排序,第二个子进程对数组的后半部分进行选择排序,第三个子线程对两个已经排序好的数组部分进行归并排序,最后当所有子线程结束之后,父进程输出排序好...
在Linux中,最常见的线程实现是LinuxThreads,它遵循“一对一”模型,每个线程对应一个轻量进程,线程的调度由内核负责,而用户空间则提供线程管理和信号处理。尽管这种模型的调度开销相对较大,但由于Linux内核对...
1. **Linux进程**:Linux操作系统支持多任务执行,这意味着在任何时刻,系统可以同时处理多个进程。这种并发执行的实现基于进程调度,即系统将CPU时间分配给各个进程,每个进程获得一个很短的时间片来执行。在用户...
Linux下多线程及多进程及同步与互斥编程详细介绍
通过这个demo,你可以学习如何在Linux环境下使用C++进行多线程串口编程,理解线程同步的概念,以及如何处理硬件交互。对于理解和应用这些技术,阅读和分析源代码将是至关重要的。同时,这个项目也可以作为进一步研究...
在 Linux2.4 内核中,消除了这个线程个数的限制,并且允许在系统运行中动态地调整进程数上限。当时采用的是 LinuxThread 线程库,它对应的线程模型是“一对一”线程模型,也就是一个用户级线程对应一个内核线程,而...
在多线程环境下,每个线程都有自己的寄存器状态和栈,但它们共享进程的代码段、数据段和其他资源。 - **历史背景**:线程技术最早在20世纪60年代被提出,但直到80年代中期,随着SOLARIS等系统的出现,多线程技术才...
多线程是指在一个进程中可以同时执行多个独立的代码段,每个代码段被称为一个线程。这种设计允许程序在处理多个任务时更加灵活,提高资源利用率和系统响应速度。在Linux系统中,线程共享同一地址空间,这意味着它们...