AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[strace](server)

Martin Hope
Hiran Chaudhuri
Asked: 2021-08-30 07:22:39 +0800 CST

Dovecot 无法读取 TLS 证书

  • 0

在我的 CentOS 7 系统上,我试图运行需要 TLS 的 dovecot。为此,我创建了我的私钥和证书

[root@homeserver /]# ls -lZ indernet/cert/homeserver.*
-r--r--r--. root certuser system_u:object_r:default_t:s0   indernet/cert/homeserver.crt
-r--r-----. root certuser system_u:object_r:default_t:s0   indernet/cert/homeserver.key
[root@homeserver /]#

为了让 dovecot 实际加载文件,我确保 /etc/dovecot/conf.d/10-ssl.conf 包含这些行:

ssl=required
ssl_key=</indernet/cert/homeserver.key
ssl_cert=</indernet/cert/homeserver.crt

有问题的部分:Dovecot 无法启动,失败并出现以下错误:

dovecot: doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-ssl.conf line 14: ssl_key: Can't open file /indernet/cert/homeserver.key: Permission denied

我尝试修改证书和密钥的文件权限(根据https://doc.dovecot.org/configuration_manual/dovecot_ssl_configuration/ ,这不应该是必需的),甚至是 777 并且没有任何变化。有人建议我这可能是 SELinux 阻止了访问,我配置了 unconfined_u:object_r:default_t:s0 以及 system_u:object_r:default_t:s0,如上所示。没变。

现在令人惊讶的部分:我非常好奇并编辑了 /usr/lib/systemd/system/dovecot.service 以包含

ExecStart=/bin/strace /usr/sbin/dovecot

然后在 /var/log/messages 我可以看到证书和密钥被访问和加载。和鸽舍的作品。但是当我再次删除 strace 时,我遇到了同样的问题。

这里可能发生了什么?

dovecot ssl-certificate strace
  • 1 个回答
  • 365 Views
Martin Hope
Rohan
Asked: 2020-12-04 22:30:50 +0800 CST

调用 API 时如何更好地配置 nginx 以减少冗余系统调用?

  • 0

我有一个在生产环境中运行的 Laravel 应用程序,并且有一些 API 使用很多。某些东西造成了瓶颈,它曾经使我们的服务器停止运行(3 个带有负载均衡器)。在优化了 Laravel 的基础,缓存配置、路由、数据等,甚至解决了所有 n+1 个问题后,我们仍然在高峰期遇到问题。有人建议我们在其中一个 nginx 工作人员上运行 strace 以查看系统级别发生了什么,所以我们这样做了,而且很有趣,有很多冗余系统调用,当调用 API 时 nginx 会尝试查找文件:

部分跟踪:

240498 stat("/var/www/html/myProject/current/public/APIRequest/3d4f7518e04e9", 0x7ffc7ee6ff70) = -1 ENOENT (No such file or directory)
240498 stat("/var/www/html/myProject/current/public/APIRequest/3d4f7518e04e9", 0x7ffc7ee6ff70) = -1 ENOENT (No such file or directory)
240498 lstat("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
240498 lstat("/var/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
240498 lstat("/var/www/html", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
240498 lstat("/var/www/html/myProject", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
240498 lstat("/var/www/html/myProject/current", {st_mode=S_IFLNK|0777, st_size=48, ...}) = 0
240498 readlink("/var/www/html/myProject/current", "/var/www/html/myProject/release"..., 4095) = 48
240498 lstat("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
240498 lstat("/var/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
240498 lstat("/var/www/html", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
240498 lstat("/var/www/html/myProject", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
240498 lstat("/var/www/html/myProject/releases", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
240498 lstat("/var/www/html/myProject/releases/20201202085755", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
240498 lstat("/var/www/html/myProject/releases/20201202085755/public", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0

现在,在这种情况下使用 ID 调用 API 3d4f7518e04e9,并尝试遍历目录以查找该文件。但它不是一个文件,它是一个 API。我们运行 strace 的时间不到 30 秒,我们有 5k 次这样的调用,这对我来说没有意义。

那么,这些调用是否必要?我不这么认为,但如果我错了,请告诉我。如果我是对的,我怎样才能更好地配置我的 nginx,以便这些调用可以“及时捕获”并得到适当的解决。欢迎任何想法。:)

PS:我们也尝试过具有类似配置的 apache,在 strace 中出现了同样的问题。

编辑:我是否只需要在我的站点配置中添加某种位置指令来解决这个问题?我正在使用官方文档https://laravel.com/docs/8.x/deployment#nginx中的基本 nginx conf,并添加了更多内容,例如:

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;

        fastcgi_buffer_size 128k;
        fastcgi_buffers 256 16k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    client_body_buffer_size 10K;
    client_header_buffer_size 1k;
    client_max_body_size 8m;
    large_client_header_buffers 4 16k;

    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;

编辑:

location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

我确实按照 Danila Vershinin 在回答中的建议尝试了文件

apache-2.2 nginx laravel strace
  • 1 个回答
  • 209 Views
Martin Hope
Amandasaurus
Asked: 2015-10-09 00:51:21 +0800 CST

strace 可以显示读/写系统调用的文件名/路径吗

  • 13

如果在 Linux 上,我 strace 一个进程,那么读取和写入将显示为文件描述符句柄号。如果我查看,/proc/$PID/fd我可以看到与 fd 编号相对应的文件的符号链接(如果适用)。

无论如何让 strace 为我查找并(通过取消引用符号链接)向我显示 strace 输出中的文件名?它已经在查找 Linux errno 并截断和编码字符串,那么它也可以这样做吗?

更新:我知道 strace 会显示open显示路径和 fd 的调用。这对于短期运行的进程来说很好。但是假设我有一个很长的运行过程(以天为单位),并且没有在 strace 下运行整个过程,只是稍后使用strace -p.

strace
  • 1 个回答
  • 10969 Views
Martin Hope
KaP
Asked: 2015-01-20 08:51:05 +0800 CST

SystemTap - 过滤自己的系统调用(系统范围的跟踪)

  • 0

我想使用 SystemTap 编写简单的类似 strace 的脚本。主要目标是只捕获系统中所有进程的一些系统调用(如打开、关闭、读取、写入等)。(不能用 strace 做到这一点,因为 strace'ing 整个系统等于即时系统冻结)。

现在它是这样的:

#!/usr/bin/env stap

probe syscall.* 
{
    printf("PID: %d\tNAME: %s\tARGSTR: %s\n",pid(), name, argstr);
}

当我想将输出保存到文件时,问题就开始了。Stap 脚本不断发现自己正在写入文件,因此它永远不会结束循环。

我认为解决方案是这样的:

    #!/usr/bin/env stap

    探测系统调用。*
    {
        如果(pid()!= myOwnPid())    
        printf("PID: %d\tNAME: %s\tARGSTR: %s\n",pid(), name, argstr);
    }

但我不知道任何提供运行 stap 脚本的 pid 的函数。

strace
  • 2 个回答
  • 789 Views
Martin Hope
bluszcz
Asked: 2012-07-13 09:42:36 +0800 CST

Java 进程 (OpenDS) 消耗所有 cpu (futex flood) - 如何调试 futex?

  • 6

今天我注意到我的 LDAP 服务器 (OpenDS) 在每个可用内核上都占用了 100% 的 CPU。快速诊断显示在 futex 锁定期间有很多 ETIMEDOUT。

我如何调试它以弄清楚发生了什么以及如何修复它?

futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779077, {1342114766, 309244206}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779079, {1342114766, 309528293}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779081, {1342114766, 309812186}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779083, {1342114766, 310107537}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779085, {1342114766, 310406075}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779087, {1342114766, 310705339}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779089, {1342114766, 311018839}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779091, {1342114766, 311315446}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779093, {1342114766, 311632617}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779095, {1342114766, 311951779}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779097, {1342114766, 312278610}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0x7f7ecf9053a4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1540779099, {1342114766, 312601929}, ffffffff) = -1 ETIMEDOUT (Connection timed out)
futex(0x7f7ecf9053d0, FUTEX_WAKE_PRIVATE, 1) = 0

不确定它是否相关 - 但我还注意到 Redmine(Ruby 应用程序)具有类似的“功能”......帮助:)

java linux debug strace opends
  • 1 个回答
  • 7691 Views
Martin Hope
ananthan
Asked: 2012-07-11 07:45:45 +0800 CST

Strace Apache 进程输出显示等待 24 秒?可能是什么原因?

  • 4

对其中一个 apache 子项执行 strace,它在两个系统调用之间显示 24 秒。我如何确定导致此行为的原因。看起来两个子项花费的时间几乎相同(24.7 和 23.92)秒。

我们在 php5 和 mysql 5 中使用 apache prefork

/var/lib/php5/ 是 php 会话文件夹

带有 processid -20539 的 apache children1 的 strace 输出

ps -u www 数据 | grep apache2 | awk '{print"-p " $1}' | xargs strace -o /strace/strace.log -ff -s4096 -r

20539 0.000064 关闭(13)= 0

20539 0.000060 打开(“/var/lib/php5/sess_9t2cvnvdoruh666rjpm515idm0”,O_RDWR|O_CREAT,0600)= 13

20539 0.000065 羊群(13,LOCK_EX)= 0

20539 24.711888 fcntl(13,F_SETFD,FD_CLOEXEC)= 0

20539 0.000056 fstat(13, {st_mode=S_IFREG|0600, st_size=211, ...}) = 0

20539 0.000080 lseek(13、0、SEEK_SET)= 0

带 processid 的 apache children2 的 strace 输出 - 20556

20556 0.000056 关闭(13)= 0

20556 0.000058 打开(“/var/lib/php5/sess_9t2cvnvdoruh666rjpm515idm0”,O_RDWR|O_CREAT,0600)= 13

20556 0.000062 羊群(13,LOCK_EX)= 0

20556 23.928294 fcntl(13,F_SETFD,FD_CLOEXEC)= 0

20556 0.000055 fstat(13, {st_mode=S_IFREG|0600, st_size=211, ...}) = 0

20556 0.000083 lseek(13、0、SEEK_SET)= 0

文件描述符(13)调用的文件可能有问题吗?我对 strace 输出的理解有什么问题吗?

php apache-2.2 strace max-file-descriptors
  • 1 个回答
  • 1737 Views
Martin Hope
quietmint
Asked: 2012-06-29 15:32:42 +0800 CST

为什么我的 cron 守护进程每隔几分钟就被杀死一次?

  • 3

大约一周前,我的 cron 守护进程拒绝继续运行。我在 OpenVZ 虚拟机上使用 Debian 6 x64。运行类似的东西pgrep cron表明守护进程没有运行。我用service cron start或启动服务/etc/init.d/cron start并启动,但几分钟后它从正在运行的进程列表中消失(在进程再次被终止之前的 1 - 30 分钟之间变化)。

使用strace -f service cron start,我可以看到该进程由于某种原因被终止:

nanosleep({60, 0},  <unfinished ...>
+++ killed by SIGKILL +++

/var/log/syslog, , ,中没有任何相关内容/var/log/messages,/var/log/auth.log也/var/log/kern.log无法解释该进程为何终止。系统至少有 800 MB 的空闲内存,并且cat /proc/loadavg返回0.22 0.13 0.04,所以资源应该不是问题。随着cron运行,free -m报告:

             total       used       free     shared    buffers     cached
Mem:          1024        211        812          0          0          0
-/+ buffers/cache:        211        812
Swap:            0          0          0

我还尝试cron使用删除并重新安装包apt-get。

更新:我最初认为问题是资源问题。我删除了我的整个 VPS,并从一个新的 Debian 映像开始。现在系统上没有其他任何东西在运行,但即使是全新安装,我的 cron 守护进程仍然会被随机杀死。

我还应该检查什么?我如何找出是什么杀死了我的crond?

debian service cron openvz strace
  • 2 个回答
  • 3395 Views
Martin Hope
Andrei Serdeliuc
Asked: 2012-06-21 07:30:03 +0800 CST

你会如何简化这个命令?

  • 10

我对 strace / netstat / 等很陌生。我正在使用此命令来跟踪处理我的请求 (telnet) 的 apache 进程,有没有办法稍微简化一下?

sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -antlp | \ 
    grep $(lsof -p `pidof telnet` | grep TCP | \
    perl -n -e'/localhost:(\d+)/ && print $1') | grep apache2 | \ 
    perl -n -e'/ESTABLISHED (\d+)/ && print $1')

谢谢!

bash command-line-interface strace
  • 4 个回答
  • 729 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve