我有一个进程,现在多次停止响应并且似乎完全锁定。它不会响应任何尝试 strace 或偷看 gdb(gdb 只是挂在 wait4() 系统调用上)。该进程是可运行的,并且不等待系统调用 (/proc/X/syscall:)running
或处于不间断睡眠状态 (/proc/X/status:) State: R (running)
。
这个过程究竟处于什么状态?这可能是某种类型的内核错误吗?
进程是redis,这种情况现在已经发生过几次了。似乎唯一可以终止进程的是重新启动。操作系统是 Cent 7。
编辑:内核版本是 3.10.0-123.13.2.el7.x86_64。尝试更新到 3.10.0-229.11.1.el7 以查看是否有任何区别。
我正在尝试为 redis 编写一个 systemd 服务文件。
这是我的文件:
[Unit]
PartOf=smp-data-services.target
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=/opt/eg/share/redis/bin/redis-server
ExecStop=/opt/eg/share/redis/bin/redis-cli
Restart=on-failure
User=eg
Group=eg
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
无论我做什么,我都不断得到:
# systemctl daemon-reload
systemd: redis.service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.
Run Code Online (Sandbox Code Playgroud)
我可以在命令行上启动 redis,没有像这样的问题:
/opt/eg/share/redis/bin/redis-server
Run Code Online (Sandbox Code Playgroud)
我读过 redis 的守护进程分叉过程是非标准的,我应该避免 Type=forking 或 oneshot。
我有一个 rw 文件系统/myraid0
。
# cat /proc/mounts | grep myraid0
/dev/mapper/isw_cfdbejjgdi_myraid0p1 /myraid0 ext4 rw,relatime,stripe=8,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
我以/myraid0
任何用户的身份写信都没有问题。
redis@host:~$ echo hi > /myraid0/tmp/redis/test
redis@host:~$ cat /myraid0/tmp/redis/test
hi
Run Code Online (Sandbox Code Playgroud)
但是,/myraid0
由于EROFS
(只读文件系统),我的进程无法在 上写入文件。
open("temp-4036.rdb", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EROFS (Read-only file system)
Run Code Online (Sandbox Code Playgroud)
这表明该进程将挂载视为 ro。
# cat /proc/15920/mounts | grep myraid0
/dev/mapper/isw_cfdbejjgdi_myraid0p1 /myraid0 ext4 ro,relatime,stripe=8,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
为什么进程只有挂载的只读视图?
谢谢!
Linux jeff-apartment-2015 4.4.0-36-generic #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
redis-server …
尝试使用 Kubuntu 16.04 64 位版本安装 redis-server:
sudo apt install redis-server
Run Code Online (Sandbox Code Playgroud)
但是在安装时收到此消息:
Setting up redis-server (2:3.0.7-1~dotdeb+6.1) ...
Job for redis-server.service failed because a timeout was exceeded. See "systemctl status redis-server.service" and "journalctl -xe" for details.
invoke-rc.d: initscript redis-server, action "start" failed.
dpkg: error processing package redis-server (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
redis-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)
尝试运行“journalctl -xe”并发现:
redis-server.service: PID file /var/run/redis/redis-server.pid not readable (yet?) after start-post: …
Run Code Online (Sandbox Code Playgroud) 在 Ubuntu 上,我在使用 SSH 隧道和SSH 密钥与 Redis 桌面管理器 (RDM)建立到 redis 服务器的连接时遇到问题。
有什么症状?
ssh
和我的id_rsa
,连接到运行 redis 的服务器.ssh
可以连接到此服务器并创建隧道(例如数据库应用程序),.ssh
的工作PEM 格式:我使用我在 google 上搜索的不同方法生成的任何 PEM 文件都被 RDM 拒绝并显示一条消息Connection: Disconnect on error: SSH Connection error(Authentication Error): Unable to extract public key from private key file: Unable to open …
Redis 已安装并且看起来正在运行:
\n\n[me@hsredistest01 ~]$ sudo systemctl status redis\n\xe2\x97\x8f redis.service - Redis persistent key-value database\n Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)\n Drop-In: /etc/systemd/system/redis.service.d\n \xe2\x94\x94\xe2\x94\x80limit.conf\n Active: active (running) since Mon 2019-04-22 19:03:35 +03; 34min ago\n Main PID: 8780 (redis-server)\n CGroup: /system.slice/redis.service\n \xe2\x94\x94\xe2\x94\x808780 /usr/bin/redis-server 127.0.0.1:6379\n
Run Code Online (Sandbox Code Playgroud)\n\n这里说正在运行端口 6379,但是当我扫描正在运行的服务端口时,我看不到它。
\n\n[me@hsredistest01 ~]$ sudo nmap -sT -O localhost\n\nStarting Nmap 6.40 ( http://nmap.org ) at 2019-04-22 19:40 +03\nNmap scan report for localhost (127.0.0.1)\nHost is up (0.000078s latency).\nOther addresses for localhost (not scanned): 127.0.0.1\nNot shown: …
Run Code Online (Sandbox Code Playgroud)