nginx 和 apache 适合作为高并发 APP 服务器吗?

2018-12-09 11:24:09 +08:00
 gsq19920418

如果适合,我想问下应该如何设置,或者说是运维,现在一到高并发(后续有数据库查询,一次得 0.7S ),APP 端就卡住

5958 次点击
所在节点    NGINX
24 条回复
isCyan
2018-12-09 11:27:38 +08:00
“数据库查询,一次得 0.7S ”
那就不是 nginx apache 的锅了
去优化你的程序和数据库吧
monsterxx03
2018-12-09 11:28:01 +08:00
你业务代码 /db 慢和 nginx/apache 有啥关系...
donyee
2018-12-09 11:31:56 +08:00
Apache、Nginx 只是前端代理转发,应用服务器得看你是什么语言实现的; Java 的话就是 Tomcat、jetty 或者 Spring Boot 集成的;你说的高并发是多少 TPS、QPS ? 0.7S 也得看是哪里耗时最多?
t6attack
2018-12-09 11:44:10 +08:00
所有学校的数据库课程,都教外连接之类的复杂查询。但在高性能应用中,复杂查询是要极力避免的。
gsq19920418
2018-12-09 11:48:12 +08:00
@donyee 应用服务器是 tomcat,0.7S 都是查询数据库时间,TPS 目前软件和我说是 100,但是服务器很渣,阿里云的最低配 2 个 CPU、8g 内存,在上面跑所有的服务。
gsq19920418
2018-12-09 11:50:16 +08:00
@donyee 现在我也在怀疑是 TCP 半连接的问题,因为我们的 APP 的应用场景是在网络极其不好的情况下打开。但是 windows 下没有找到怎么测试和统计。
donyee
2018-12-09 11:50:20 +08:00
0.7S 都是查询数据库时间,加个索引看看
likuku
2018-12-09 11:53:44 +08:00
#5 #6 看起来楼主对“病因”很清楚啊,那就对症下药嘛... 当然,生产机得谨慎,各种备份作好,先弄个类似的试验环境
gsq19920418
2018-12-09 11:55:19 +08:00
@likuku 我是搞嵌入式硬件的,只是对 TCP/UDP 比较熟,但是不懂软件的 Tomcat 什么的,所以我问问需要怎么设置。
likuku
2018-12-09 12:02:44 +08:00
@gsq19920418 数据库用什么?能查查它近期的 ops 统计信息么?

MySQL 的话,可以设置开启 慢查询 日志,记录超过你设定最小时长的查询语句。
fghjghf
2018-12-09 12:23:33 +08:00
1、app 是什么类型的 app ? IO 密集型的还是做长链接的?
2、你理解的高并发是什么啊,ng 是 epoll/kqueue 实现的,网络 IO 复用。这跟你高并发毫无关系啊。
3、TCP 半链接堵塞没什么可能,除非 SYN 攻击,这个根本不是短板,listen 在 unix 记得是 64465 个(我也不确定)
4、我猜问题应该出在磁盘 IO。这个不是 IO 多路复用可以解决的问题,跟 nginx 和 apache 一点关系都没有啊。这个情况一定要开多线程 /进程,用异步。不然量一大,或者重接,mysql 被击穿,你客户端只会收到 504.。
fghjghf
2018-12-09 12:25:15 +08:00
@fghjghf 说错了,大概是 65535,不记得了,这个问题你应该优化代码逻辑,尤其是数据库都读写,搞主从,reads 热缓存,等等都策略咯
gsq19920418
2018-12-09 12:32:01 +08:00
@fghjghf 新平台已经上了 reads 什么的啦,但是目前处在新老交替,老的目前还得维持一段时间,APP 是属于长连接模式,得到数据断开。磁盘 IO 有可能。另外我们的服务器由于好管理,用的 windows,不知道阿里云的 windows 是否有设置相关参数。
loveCoding
2018-12-09 12:35:16 +08:00
很多开发同学碰到 window 平台都是一脸懵逼~~我也是
fghjghf
2018-12-09 12:43:59 +08:00
@gsq19920418 老哥,这就尴尬了,windows 做 server 端我真没用过。只能说这大概是磁盘 IO 引起的,阿里云应该能看到相关数据图的,这个我真没了解过。真没有的话,你可以 psutil 这个库写个检测脚本的。
zjiecode
2018-12-09 15:00:21 +08:00
一般,nginx 就做前端的负载均衡,反相代理一下流量。你查询慢,要不是程序问题,比如查询 sql 不够优化,要不也可能是 db 负载太高了。

另外,为啥查询 0.7s ,app 就卡住了?你一次请求,就算 3-4s,app 也不会卡住吧?
cominghome
2018-12-09 17:38:45 +08:00
1. keepalive 开起来
2. 内核参数把 tcp 复用和快速回收开一下,作为代理,nginx 基本上没什么问题了。

一条查询 0.7s ,本身就是很大的问题
gamecreating
2018-12-09 22:16:26 +08:00
golang
如果你不会 C C++ golang 爽到你爆
alex321
2018-12-09 22:32:08 +08:00
IIS6 都抗过 1241 每秒的请求压力。Nginx 可比它强多了。。。你这压力还不在 web server 上。
KasuganoSoras
2018-12-09 22:36:12 +08:00
啥数据库,我 CentOS 7.5 下 Nginx + PHP 7 + Mariadb 10.3,每秒扛 2000 多请求没啥问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/515798

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX