sql >> データベース >  >> NoSQL >> Redis

redisが最大オープンファイルを設定できない理由

    さて、この投稿には少し遅れていますが、ubuntu 16.04で新しいredisサーバー3.0.6を構成するために(一晩中)多くの時間を費やしたためです。他の人が時間を無駄にする必要がないように、自分のやり方を書き留めておけばいいと思います...

    新しくインストールされたredisサーバーの場合、/var/log/redis/redis-server.logであるredisログファイルに次の問題が表示される可能性があります。

    最大オープンファイル

    3917:M 16 Sep 21:59:47.834 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
    3917:M 16 Sep 21:59:47.834 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
    3917:M 16 Sep 21:59:47.834 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
    

    変更するように指示する投稿をたくさん見ました

    /etc/security/limits.conf
    redis soft nofile 10000
    redis hard nofile 10000
    

    または

    /etc/sysctl.conf
    fs.file-max = 100000
    

    これはubuntu14.04では機能する可能性がありますが、ubuntu16.04では機能しないことは確かです。 upstartからsystemdへの変更と関係があると思いますが、私はLinuxカーネルの専門家ではありません!

    これを修正するには、 systemdを実行する必要があります 方法

    /etc/systemd/system/redis.service
    [Service]
    ...
    User=redis
    Group=redis
    # should be fine as long as you add it under [Service] block
    LimitNOFILE=65536
    ...
    

    次に、デーモンをリロードしてサービスを再起動する必要があります

    sudo systemctl daemon-reload
    sudo systemctl restart redis.service
    

    それが機能するかどうかを確認するには、proclimitsをcatしてみてください

    cat /run/redis/redis-server.pid
    cat /proc/PID/limits
    

    表示されます

    Max open files            65536                65536                files     
    Max locked memory         65536                65536                bytes   
    

    この段階で、開いている最大ファイルが解決されます。

    ソケットの最大接続

    2222:M 16 Sep 20:38:44.637 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    

    メモリオーバーコミット

    2222:M 16 Sep 20:38:44.637 # Server started, Redis version 3.0.6
    2222:M 16 Sep 20:38:44.637 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    

    この2つは関連しているので、すぐに解決します。

    sudo vi /etc/sysctl.conf
    
    # Add at the bottom of file
    vm.overcommit_memory = 1
    net.core.somaxconn=1024
    

    これらの構成を機能させるには、構成を再ロードする必要があります

    sudo sysctl -p
    

    透明な巨大なページ

    1565:M 16 Sep 22:48:00.993 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
    

    これを永続的に解決するには、ログの提案に従い、rc.localを変更します

    sudo vi /etc/rc.local
    
    if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
        echo never > /sys/kernel/mm/transparent_hugepage/enabled
    fi
    

    これには、再起動する必要があります 、データをバックアップするか、実際に実行する前に必要なことを実行してください!!

    sudo reboot
    

    ここで、redisログをもう一度確認してください。エラーや警告のないredisサーバーが必要です。



    1. 配列フィールドのメンバーを検証するにはどうすればよいですか?

    2. MongoDBでドキュメントを管理する方法

    3. redisデータをMySQLに移動するためのより高速な方法

    4. Redisでオンラインユーザーを追跡するための2つのアプローチ。どちらが速いですか?